4

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

2 回答 2

0

我遇到了同样的问题。而我的情况是我把代码和变量放在同一个部分。在我将变量放在不同的部分后,问题就解决了。希望这可以帮助。

于 2013-11-27T10:40:02.917 回答
0

"#define DB_SEGMENT属性(( section ("DBSegment")))"

我在 # 和 define 之间看到一个空格,这是不正确的。

删除该空间并尝试编译。

于 2019-04-29T13:42:58.290 回答