10

iOS 4.3 シミュレーター (Xcode 4.2) でアプリケーションを実行しようとすると、@autoreleasepool{} を押すと次のようにクラッシュします。

dyld: lazy symbol binding failed: Symbol not found: _objc_autoreleasePoolPush

周りを見回したところ、回避策は追加することであることがわかりましたlibarclite_iphoneos.a。として、シミュレータ用のバージョンもありますlibarclite_iphonesimulator.a

シミュレーターとハードウェアの両方で実行するには、プロジェクトに両方のライブラリを追加する必要があります。しかし、どちらを構築しても、他のライブラリはサポートされていないアーキテクチャ用であると不平を言っています。

たとえば、シミュレーター用のビルド:

ld: warning: ignoring file /Developer-4.2/Platforms/iPhoneOS.platform/
Developer/usr/lib/arc/libarclite_iphoneos.a, missing required architecture
i386 in file

これらの両方を同時に修正するにはどうすればよいですか? それともNSAutoreleasePool、今のところ古い構文に固執する必要がありますか?

4

3 に答える 3

10

クリーンでクリーンなフォルダー、iPhoneシミュレーターのリセット、さらには再起動などの試行の後、ターゲットビルド設定のIPHONE_DEPLYMENT_TARGETをiOS5.0からiOS4.2に変更しました。働いた。

于 2011-12-25T23:54:12.497 に答える
1

Other Linker Flags ビルド設定を使用してライブラリにリンクし、「Any iOS」または「Any iOS Simulator」に基づいて値を特化できます。

于 2011-10-17T19:32:21.140 に答える
0

2 つの静的ライブラリを 1 つのユニバーサル ライブラリにマージすることもできます。ターミナルに行き、言う

lipo -create -output /where/you/want/it/libarclite_universal.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphonesimulator.a

(ターミナルで)言うことで、結果のファイルを確認できます

file /where/you/put/it/libarclite_universal.a

次のように出力されます。

libarclite_universal.a: Mach-O universal binary with 3 architectures
libarclite_universal.a (for architecture i386):current ar archive random library
libarclite_universal.a (for architecture armv6):current ar archive random library
libarclite_universal.a (for architecture armv7):current ar archive random library

このライブラリは静的にリンクされているため、アプリに必要なものだけが最終的なアプリにリンクされるため、sim ライブラリが含まれているため、最終的なアプリは成長しません。

于 2011-11-16T14:17:54.593 に答える