我正在使用 Android NDKr8 和扩展 gcc 来编译一些跨多个平台共享的库代码,包括一些嵌入式平台。此代码使用段将一堆元素放入连续的内存空间。编译正在生成“错误:variable_name 导致节类型冲突”。
我们使用宏来声明段属性:
# define DB_SEGMENT __attribute__ ((__section__ ("DBSegment")))
上面的 variable_name 声明如下:
dbStruct const variable_name[] DB_SEGMENT = {
{conststringvalue0, sizeof(conststringvalue0)},
…more like this
};
dbStruct 是
typedef struct dbStruct
{
const char * const address;
const UINT16 stringSize;
} dbStruct;
conststringvalue0 声明如下:
const char conststringvalue0[] DB_SEGMENT = "some string value";
相同的代码在 Xcode 中使用其默认编译器进行编译,只需对 DB_SEGMENT 宏的声明进行少量修改。这是比我习惯的更深的 C,所以任何帮助都将不胜感激。谷歌对该错误有一些参考,但对它的修复尚不清楚。是否有更好的策略来设置特定的连续内存部分?
作为对评论的回应,这是与 XCode 上正确编译版本的唯一区别:
#define DB_SEGMENT __attribute__ ((section ("DBSegment,DBSection")))