NDK错误:“无法解析`.data.rel.ro.local'”

时间:2013-03-22 15:52:40

标签: android compiler-errors android-ndk

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;工具链可能会改变帮助吗?究竟是怎么回事?

1 个答案:

答案 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,幽灵般的东西。