必要なクロスコンパイル オプションを指定して GNU Autotools "./configure" を呼び出す一連の構成スクリプトを使用して、iPhone 用の Apache Portable Runtime (APR) のクロスコンパイルに成功しました。
私は現在、libtasn1 と libgcrypt に依存する GNUTLS をクロスコンパイルしようとしています。これは、libgpg-error に依存しています。これは私が問題に直面しているところです。あなたの助けを借りることができます...
現在、libgpg-error をクロスコンパイルしようとしています。以前に使用した構成スクリプトはうまく機能しています。「./configure」プロセスは問題なく完了します。「make」を実行すると問題が発生します。make を実行すると、すべてがコンパイルされるように見えますが、最後に次の厄介なリンカー エラーが発生します。
/bin/sh ../libtool --tag=CC --mode=link /Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -isystem /Developer/Platforms/iPhoneOS.platform/ Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr /include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include -arch armv6 --sysroot='/Developer /Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk' -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib -o gpg-error gpg_error- strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o ./libgpg-error.la /Users/michaelsafyan/Downloads/libgpg-error-1.7/compile /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot =/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib/gcc/arm-apple- darwin9/4.2.1/include/ -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/include -isystem /opt/iphone-3.0/include -isystem /usr/local/iphone-3.0/include -arch armv6 --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk -o gpg-error gpg_error-strsource-sym.o gpg_error-strerror-sym.o gpg_error-gpg-error.o -L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/lib -L/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib -L/opt/iphone-3.0/lib -L/usr/local/iphone-3.0/lib ./.libs/libgpg-エラー.a 未定義のシンボル: 「_fwrite$UNIX2003」、参照元: gpg_error-gpg-error.o の _main 「_strerror$UNIX2003」、参照先: libgpg-error.a(libgpg_error_la-strerror.o) の _gpg_strerror ld: シンボルが見つかりません collect2: ld が 1 つの終了ステータスを返しました make[3]: *** [gpg エラー] エラー 1 make[2]: *** [すべて] エラー 2 make[1]: *** [全再帰] エラー 1 make: *** [すべて] エラー 2
これを機能させる方法についてのアイデアはありますか? 私がコンパイルしているソフトウェアのバージョンは次のとおりです。
- libgpg エラー: 1.7
- libgcrypt: 1.4.4
- libtasn1: 2.2
- gnutls: 2.8.4
助けてください。ありがとうございました。
アップデート
最初のフィードバックによると、各 SDK には「$SDKROOT/usr/lib」に「libSystem.dylib」のコピーがあります。「$DEVROOT/usr/lib」に libSystem のコピーはありません。
- $DEVROOT = "/開発者/プラットフォーム/iPhoneOS.platform/開発者"
- $SDKROOT = "$DEVROOT/SDKs/iPhoneOS$VER.sdk"
「libSystem」ライブラリには、各シンボルの通常の装飾されていないバージョンが含まれていますが、シンボルの「$UNIX2003」バリアントは含まれていません。GPG-ERROR が "_POSIX_C_SOURCE"、"_UNIX"、または別の UNIX 機能テスト マクロを定義しており、これらの機能テスト マクロが存在する場合に "$UNIX2003" を関数に追加する不正なヘッダーが含まれていると思われます。インクルード ディレクトリのリストから「$DEVROOT/usr/include」を削除しても、このエラー メッセージの削除には影響しません。
最後の手段として、「ld」が「-alias_list」オプションを受け入れて、「_fwrite _fwrite$UNIX2003」などのエントリを含むファイルを指定して、これらの未定義シンボルを装飾されていないバリアントに強制的に解決できることがわかりました。可能であれば、このオプションは避けたいと思います。ハック的で危険な可能性があるためです。