更新: システムで問題なく動作している場合は、コメントを残してください。これは、XCode のバグではなく、私のセットアップの問題であることを確認します。
開発システムを XCode 4.5.1 にアップグレードし、IOS SDK 6.0 でコンパイルした後、IOS 4.3 シミュレーターで実行すると次のエラーが発生します。
dyld: lazy symbol binding failed: Symbol not found: _objc_release
Referenced from: /Users/baraupp/Library/Application Support/iPhone Simulator/4.3.2/Applications/AFD73AB4-7047-468B-A20B-9C941850ED3C/Flyskyhy.app/Flyskyhy
Expected in: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation
dyld: Symbol not found: _objc_release
Referenced from: /Users/baraupp/Library/Application Support/iPhone Simulator/4.3.2/Applications/AFD73AB4-7047-468B-A20B-9C941850ED3C/Flyskyhy.app/Flyskyhy
Expected in: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation
配置ターゲットを 4.3 に設定し、プロジェクトで ARC を使用し、いくつかのファイルを -fno-objc-arc に配置しました。コンパイルとリンクはエラーなしで成功しますが、シミュレーターで実行しようとすると失敗します。アップグレードする前は問題なく動作していました。
編集:
ほぼ同じことを尋ねる同様の Stackoverflowの質問を見つけました。その回答は、他のリンカー フラグに -fobjc-arc を追加することを提案しています。残念ながら、それは私の問題を解決しませんでした。編集: リンク フェーズで実際に使用されるフラグを確認しました。また、-fobjc-arc を明示的に追加しなくても、リンク中に -fobjc-arc フラグが存在します。
コメントでブラッドが示唆したように、ライブラリlibarclite_iphoneos.a
をプロジェクトに追加しましたが、それも役に立ちませんでした。そのライブラリは /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc で見つかりました。これは私の見解では奇妙な場所ですが、他の場所では見つかりませんでした。
_objc_retain
そのライブラリで「nm」も実行しましたが、欠落しているシンボルも定義していません。ただし、それが_objc_retain$non_lazy_ptr
何を意味するのかはわかりません。
編集:ライブラリが無視されることがわかりました:
ld: warning: ignoring file libarclite_iphoneos.a, missing required architecture i386 in file libarclite_iphoneos.a
明らかに、それは正しいファイルではありません。しかし、システムの他の場所に同じファイルが見つかりません ('find' で検索しました)。
何か案は?