android - 如何解决 "section type conflict"编译错误以及将 section 属性与 gcc 结合使用的最佳实践

标签 android gcc android-ndk embedded

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

相关文章:

android - 在 eclipse 中调试 Android 返回堆栈

我们可以将任何参数传递给 main 函数吗?

gcc - 如何将 -fvisibility 选项应用于静态库中的符号?

android - 使用 spring 和 resttemplate postForObject 获取 http 400 错误请求错误

启动器图标上的 Android 通知

linux - 如何使 libusb 库对另一个程序可见?

android - 如何修复 gradle 任务 ':app:mergeDebugJniLibFolders' in flutter gradle build for opencv native with NDK?

java - 如何使用Libcore.os设置环境变量

debugging - 在摩托罗拉 Droid 上调试 native 代码

java - HashMap: java.lang.NullPointerException: 尝试调用虚拟方法 'java.lang.Object java.util.HashMap.put'