0

現在開発中のiPhoneアプリにopenLdapを使ってみました。openLdap をコンパイルするには、 link textの fat_build.sh を使用しています。また、シミュレータ 3.1.3 および OS X 10.6.0 で開発しています。しかし、最後のステップで

$DEVROOT/usr/bin/lipo -arch arm lnsout/$LIBLDAP_NAME_static.arm -arch i386 lnsout/$LIBLDAP_NAME_static.i386 -create -output lnsout/$LIBLDAP_NAME_static
$DEVROOT/usr/bin/lipo -arch arm lnsout/$LIBLBER_NAME_static.arm -arch i386 lnsout/$LIBLBER_NAME_static.i386 -create -output lnsout/$LIBLBER_NAME_static

次のエラーが表示されます。

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo: ファイル (lnsout/libldap.a.arm) に指定されたアーキテクチャ タイプ (arm) が、cputype (7) および cpusubtype (3) と一致しません ( cputype (12) および cpusubtype (0))
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/lipo: ファイル (lnsout/liblber.a.arm) に指定されたアーキテクチャ タイプ (arm) が、cputype (7) および cpusubtype (3) と一致しません ( cputype (12) および cpusubtype (0))

ヘッダー検索パス、ライブラリ検索パス、リンカーフラグを結果なしで設定して修正しようとしました。

この問題を解決する方法があれば教えてください。

4

1 に答える 1

2

iPhone 用の libssh2 をビルドしているときに同様のエラーが発生し、多くの検索を行った後、.arm ビルドが実際には i386 (私の MacBook Pro) 用にビルドされていることに気付きました。

各バージョンが正しくビルドされていることを確認するためだけに、ARMv6 (デバイス)、i386 (コンピューター)、および x86_64 (シミュレーター) 用に libssh2 をコンパイルするところまで行きました。次に、lipo を使用して arm と x86_64 アーキテクチャを組み合わせました。私のメモに「'make clean' と 'make distclean' はあなたの友達です」というスター付きのコメントがあるので、最初にマシン用のライブラリをビルドした場合、iPhone 用にビルドしたときにそのライブラリの構成ファイルがまだ残っていた可能性があります。 .

コマンド「lipo -info libldap.a.arm」および「file libldap.a.arm」(ファイル名用に変更) を使用して、ビルド タイプに関する詳細情報を確認しました。参考までに、正しくビルドすると、これらのコマンドはアーキテクチャ「arm」と「x86_64」を示しました。

最後に 1 つ気付きました。上記の github リンクのコードには、libldap.a と liblber.a のコンパイル済みユニバーサル バイナリが実際に含まれています。ライブラリの構築をいじった後、私はそれに気付き、ldap.h ファイルでこれら 2 つのファイルを使用しただけで、問題なく実行できました。

于 2010-09-15T14:11:22.543 に答える