【发布时间】:2013-03-22 15:52:40
【问题描述】:
Android/NDK 项目,使用 NDK 版本一直到 r8c。在 8d 和 8e 下,我在 armeabi-v7a 构建时收到一条编译错误消息:
Compile++ thumb : myproject <= MyFile.cpp
C:\cygwin\tmp\ccFXOc2F.s: Assembler messages:
C:\cygwin\tmp\ccFXOc2F.s:1935: Error: can't resolve `.data.rel.ro.local' {.data.rel.ro.local section} - `.LPIC44' {*UND* section}
同一项目的 armeabi、MIPS 和 x86 构建成功。
它可靠地出现在同一个文件中。该文件没有什么特别之处 - vanilla C++,它可以在许多其他平台(iOS、Windows、NDK r8c 等)上编译和工作。没有 STL。不过,它确实定义了大量的字符串常量(AKA 初始化的只读数据)。会发生什么?
已经尝试完全重建,甚至完全删除了obj 文件夹。
C++ 标志是:
LOCAL_CPPFLAGS := -fshort-wchar -fsigned-char -Wno-psabi
我知道 NDK 带有多个版本的 GCC;工具链更改可能有帮助吗?具体如何?
【问题讨论】:
-
您是否能够检查临时程序集文件第 1935 行的内容?
-
否; make 终止时,程序集将从临时文件夹中消失。相反,我使用了一种久经考验的真正技术,即注释掉文件中每个函数的主体,然后一点一点地添加代码,直到错误再次出现。这种方法在 O(log N) 时间内收敛到故障线上。 :)
标签: android compiler-errors android-ndk