web-dev-qa-db-ja.com

Xcode-アーキテクチャx86_64のシンボルが見つかりません(iOS Lib)

静的ライブラリを構築しています。ビルド設定のアーキテクチャは$(ARCHS_STANDARD)に設定されています。これはStandard Architectures (armv7, armv7s, arm64)として表示されます。iOSデバイスを選択し、シミュレーター(iPhone Retinaなど)を使用してlibをビルドします。

2つのビルド(1つは_Debug-iphoneos_内、もう1つは_Debug-iphonesimulator_内)があるので、_lipo -create_を使用して集約ライブラリを作成します。

_lipo -create path/to/first/lib /path/to/second/lib -o MyLib.a
_

このライブラリを別のプロジェクトで使用して、64ビットアーキテクチャのiOSデバイスでシミュレートすると、symbol(s) not found for architecture x86_64が返されます。 libプロジェクト自体がlibを使用する別のプロジェクトのあるワークスペース内にいるほど、私を本当に怒らせているのは。 64ビットiOSシミュレーターでシミュレーションできます! (その点についてはすべてのシミュレーターとデバイスで)。私は何を間違えていますか?

ノート:

  1. これは重複していませんQ.そのことを非難する前に(この愚かな問題を修正しようとするのは2日目なので)StackとGoogleで検索しました。すべての答えが役に立たない。
  2. Xcode 5.1.1を使用しています。
26

IPhone Retina 64ビットシミュレーターでテストしようとしたときに、アプリの1つで使用しているフレームワークライブラリでこれに遭遇しました。

私は単にx86_64は、すべてのアーキテクチャ向けに構築し、常に構築するように設定するアーキテクチャとして。魅力を発揮しました。

enter image description here

14

lipoツールは、fat mach-oバイナリを作成できるだけでなく、それらを検査できます:xcrun lipo -info /path/to/libThing.a

これにより、ファイル内のアーキテクチャが出力されます。 lipoを使用してバイナリに参加する前に、これを実行して、期待するアーキテクチャが存在することを確認してください。ファットバイナリ結合の結果に対してこれを実行することもお勧めします。

あなたの場合には次が必要です:

iPhoneSDK構成:armv7、armv7s、arm64

iPhoneSimulatorの構成:i386、x86_64

IPhoneSimulatorビルド製品は、質問に基づいてx86_64バイナリを生成していないようです。ビルド構成を確認します-特に、「アクティブなアーキテクチャのみをビルド」(ONLY_ACTIVE_Arch)NOに設定する必要があります。デフォルトでは、これはリリースではNOですが、デバッグではYESです。 YESの場合、ビルド製品には1つのアーキテクチャのみが含まれます。

6
quellish

アプリケーションプロジェクトターゲットに移動し、ライブラリ検索パスを確認します。

ライブラリファイルのパスが二重引用符で囲まれていることを確認します。

"$(SRCROOT)/MyAppTest/TestFlight"

二重引用符がない場合は、それらを追加してプロジェクトをコンパイルします。

それがあなたのために働くことを願っています。

0
Pratik Patel