2012-01-06 5 views
24

ARCが有効な静的ライブラリを使用する非ARCプロジェクトがあります。これはサポートされているシナリオなので、すべて正常に動作します。つまり、Simulatorを含む4.xデバイスでコードを実行するまでです。その場合、コードは、次のリンカーエラーで吹く:ARC-有効コードの一部がinit方法(self = [super init])のように、_objc_storeStrong関数をコールしようとし、これは、すぐに起こるARCをサポートしている静的ライブラリが非ARCプロジェクトにリンクされているため、リンカエラーが発生する

dyld: lazy symbol binding failed: Symbol not found: _objc_storeStrong 
    Referenced from: /Users/zoul/Library/Application Support/iPhone Simulator/4.3.2/Applications/…/Demo.app/Demo 
    Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/Foundation.framework/Foundation 

。メインプロジェクトをARCに変換することで問題は解決しますが、他にも解決策があるかどうかを知りたいと思います。

+0

ARCをサポートするLLVMを使用してリンクしていますか? – Krizz

+0

最初に:ツールチェーンはおそらく、主プロジェクトでARCが有効になっているときにリンクするライブラリを追加したばかりです。あなたが写しで見つけられないならば、あなたはARCで1つのソースをコンパイルすることによってそれにリンクすることができるかもしれません。 – justin

+1

それは素晴らしい考えです、@ジャスティン! 1つのARC対応ファイルでのトリックはうまくいかなかったが、リンカーにライブラリを含める正しい引数が見つかったので、うまくいくようだ。あなたはそれを答えとしてどうかできますか?簡単なものがあれば、それを編集して詳細を追加します。 – zoul

答えて

30

私は、ツールチェーンが、ARCが正しく機能するために、リンクに必要なライブラリを追加した可能性があると想定しました。したがって、リンカーの転写物にはこの情報が含まれている可能性があります。アプリケーション自体のプロジェクトがARC対応でない場合は、デフォルトでは取得できないかもしれませんが、明示的に定義することでそれらにリンクすることもできます。

ビルドトランスクリプトを見ると、適切なリンカーフラグが見つかることがあります。これは-fobjc-arc(関連するコンパイラフラグと同じ)です。この設定を他のリンカフラグに追加すると、リンカはメインビルド製品とともにARCライブラリをインクルードし、コードは正常に動作するはずです。

+0

ありがとう、この回答は、午後になってこれを理解しようとする人の命を救った! – AliSoftware

+2

これはもはやXcode 4.3.2では動作しません。 '-fobjc-arc'はlibツールの無効なフラグです。 ( "-fobjc-arcの中の未知のオプション文字' f ') –

+3

これはXcode 4.3.2で動作していることを確認できます。私はちょうどやったし、コンパイラはシミュレータのためにビルドするとき何も文句を言わなかった。 – csotiriou

5

これまでの受け入れられたソリューションは、もはやXcode 4.3.2で動作しないように見えるので、これに対する新しい回答が追加されています。私は、-fobjc-arcリンカーフラグが決して公開されていないと仮定し、削除されたと仮定することができます。

これは既知の問題です。the only thread I can find on this Appleの誰かがdevforumsについてコメントしていますが、2011年中頃です。そのスレッドから、手動で以下のファイルをリンクしても問題が解決することが示唆された:これはあなたがが、最新のコンパイラ/ SDKを使用してコンパイルする必要が

${DEVROOT}/Platforms/iPhoneOS.platform/Developer/usr/lib/arc/libarclite_iphoneos.a 

。私はテストなしでこの答えを提出しています、それが動作する場合、upvoteしてください、それがダウンしてください!

+0

Upvoting、これは便利な追加です。まだテストしていない。 – zoul

+1

DEVROOTが私にとってうまくいかないようです。ライブラリの検索パスに '$(PLATFORM_DEVELOPER_USR_DIR)/ lib/arc'、' -larclite_iphoneos'のデバイス固有のリンカフラグ –

+0

便利な追加ですが、-fobjc-arcを単に追加する理由をまだ見つけていませんリンカーフラグはXcode 4.3.2でまだ動作しています – csotiriou

関連する問題