4

iPhoneで使用できるようにするために、ZeroMQ Cバインディングをコンパイルしようとしています。構成オプションは次のとおりです。

./configure --host=arm-apple-darwin --enable-static=yes --enable-shared=no CC=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.2.1 CFLAGS="-pipe -std=c99 -Wno-trigraphs -fpascal-strings -O0 -Wreturn-type -Wunused-variable -fmessage-length=0 -fvisibility=hidden -miphoneos-version-min=3.1.2 -gdwarf-2 -mthumb -I/Library/iPhone/include -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk -mdynamic-no-pic" CPP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp AR=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ar AS=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/as LIBTOOL=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/libtool STRIP=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/strip RANLIB=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ranlib

実際には正常に構成およびコンパイルされますが、Xcode Frameworks セクションに追加すると、警告が表示ld: warning: in /path/to/app/libzmq.a, file was built for unsupported file format which is not the architecture being linked (armv7)され、多くのシンボルが見つからないというエラーが発生します。

現在アクティブなアーキテクチャを armv6 から armv7 に変更すると、警告メッセージがそれを armv6 に変更します。私は何を間違っていますか?

ありがとう、ダン

4

2 に答える 2

6

iPhone 用のユニバーサル armv6/armv7 バイナリを作成しているようです (これがデフォルトであるため、意味があります)。つまり、リンクするユニバーサル ライブラリを構築する必要があります。両方のライブラリをビルドしてから、 を使用lipoして 2 つを結合します。

たとえば、armv6 をビルドして に配置し、armv6/libfoo.aarmv7 を に配置しarmv7/libfoo.aます。次に実行します

lipo -arch armv6 armv6/libfoo.a -arch armv7 armv7/libfoo.a -output libfoo.a -create

ユニバーサル ライブラリを作成しますlibfoo.a

于 2010-09-01T00:09:38.530 に答える
0

からの警告メッセージを考えるとld、正しいプラットフォーム用にライブラリをコンパイルしていないと思います。そして、あなたが使用していることを考えるとconfigure、私の推測では、ライブラリをXcodeの外部でコンパイルし、後でそれをXcodeに取り込んでリンクしようとしていると思います。

おそらく、configureを実行してヘッダーを設定してみることができますが、実際のコンパイル手順はXcode内で行いますか?

ここSOには、iPhoneプロジェクトで使用するためのサードパーティ(外部)CまたはC++ライブラリのコンパイルに関する多くの関連する質問があります。

iPhone用の静的ライブラリを作成する

TiMidity:iPhone用にこのライブラリをコンパイルするのに助けが必要

于 2010-08-31T23:57:38.280 に答える