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;工具链可能会改变帮助吗?究竟是怎么回事?
答案 0 :(得分:0)
对我来说肯定看起来像编译器错误。它与对大量静态const数据的索引访问有关。当我略微重新制定一个完美无辜的陈述时,错误信息就消失了。
曾经是:
//In global scope
static const LPCWSTR Comments[] = {L"A lot of strings here", L"String 2", L"String 3" /* and many more */ }:
void SomeMethod()
{
DoSomething(Comments[i]); //That was the offending line - commenting it out would get rid the error
}
替换为:
void SomeMethod()
{
static LPCWSTR pComments = 0;
if(!pComments)
pComments = Comments;
DoSomething(pComments[i]); //Now it works.
}
Ooky,幽灵般的东西。