如何解决“部分类型冲突”编译错误和使用gcc的section属性的最佳实践

时间:2012-05-03 17:52:05

标签: android gcc android-ndk embedded

我正在使用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")))

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我的情况是我把代码和变量放在同一部分。在我将变量放在不同的部分后,问题被驳回。希望这会有所帮助。

答案 1 :(得分:0)

“##定义DB_SEGMENT 属性(((部分(“ DBSegment”)))”

我看到#和define之间的空格不正确。

删除该空间,然后尝试编译。