実験の数時間、私は、次の例(C++)に問題を軽減するために管理した後:iPhone静的ライブラリクラン/ LLVMエラー:non_lazy_symbol_pointers
extern "C" void foo();
struct test
{
~test() { }
};
void doTest()
{
test t; // 1
foo(); // 2
}
これはXcodeでiOSデバイス用にコンパイルされています4.2、付属のClangコンパイラ(Apple LLVMコンパイラ3.0)とiOS 5.0 SDKを使用してください。プロジェクトはCocoa Touchスタティックライブラリとして設定され、AIRネイティブエクステンションを構築しているため、[共有ライブラリとのリンクを有効にする]が[いいえ]に設定されています。関数foo
は別の外部ライブラリで定義されています。 (私の実際のプロジェクトでは、これはAIRネイティブ拡張で使用するためにはAdobeによって定義されたC API機能のいずれかになります)
このコードをコンパイルしようとすると、私はエラーを取り戻す:
FATAL:incompatible feature used: section type non_lazy_symbol_pointers (must specify "-dynamic" to be used)
clang: error: assembler command failed with exit code 1 (use -v to see invocation)
1
または2
のいずれかの行をコメントアウトするか、ビルド設定「共有ライブラリとのリンクを有効にする」を「はい」に変更すると、エラーは消え去ります。 (ただし、ビルド設定を変更した場合は、ライブラリを最終プロジェクトにリンクするときに複数のld warning: unexpected srelocation type 9
警告が表示され、デバイス上でアプリケーションがクラッシュします)。test
からデストラクタを削除するとビルドエラーもなくなります。
So:これはClangのバグですか?すべての重要かつ未確認のビルド設定が欠落していますか?外部から提供された関数とデストラクタを持つ構造体との相互作用は、最小限にとどめて非常に特有です。
AIR以外のケースでも同じ問題が発生しました。主な問題は、あなたの最初の弾丸であり、共有リンクがイエスにリンクして問題を解決したことです。 –