0

Android / NDKプロジェクトは、r8cまでのNDKバージョンで動作しました。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ビルドは成功しています。

同じファイルに確実にポップアップします。このファイルは特別なものではありません。バニラC++であり、他の多くのプラットフォーム(iOS、Windows、NDK r8cなど)でコンパイルおよび動作します。STLはありません。ただし、健全な量の文字列定数を定義します(別名初期化された読み取り/専用データ)。何が起こっているのでしょうか?

すでに完全な再構築を試みましたが、objフォルダを完全に削除しました。

C++フラグは次のとおりです。

LOCAL_CPPFLAGS := -fshort-wchar -fsigned-char -Wno-psabi

NDKにはいくつかのバージョンのGCCが付属していることを私は知っています。ツールチェーンの変更が役立つでしょうか?どのくらい正確に?

4

1 に答える 1

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.
}

うわー、不気味なもの。

于 2013-03-22T16:53:16.343 に答える