我正在使用Android NDKr8和扩展程序gcc来编译一些在多个平台(包括一些嵌入式平台)上共享的库代码。此代码使用段将一堆元素放入连续的内存空间。编译生成“错误:variable_name导致节类型冲突”。
我们使用宏来声明segment属性:
# 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")))
答案 0 :(得分:0)
我遇到了同样的问题。我的情况是我把代码和变量放在同一部分。在我将变量放在不同的部分后,问题被驳回。希望这会有所帮助。
答案 1 :(得分:0)
“##定义DB_SEGMENT 属性(((部分(“ DBSegment”)))”
我看到#和define之间的空格不正确。
删除该空间,然后尝试编译。