我正在使用 Android NDKr8 和扩展 gcc 来编译一些库代码,这些库代码在多个平台(包括一些嵌入式平台)之间共享。此代码使用段将一堆元素放入连续的内存空间中。编译生成“错误:variable_name 导致节类型冲突”。
我们使用宏来声明段属性:
# define DB_SEGMENT __attribute__ ((__section__ ("DBSegment")))
上面的变量名声明如下:
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")))
最佳答案
我遇到了同样的问题。而我的情况是我把代码和变量放在同一个部分。在我将变量放在不同的部分后,问题就消失了。希望这会有所帮助。
关于android - 如何解决 "section type conflict"编译错误以及将 section 属性与 gcc 结合使用的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436759/