2011-01-24 7 views
16

一部のライブラリでは、Xcodeプロジェクトにリンクするときに-all_loadリンカフラグが必要です。ただし、ライブラリ間にシンボルの競合があると、リンカーエラーが発生します。解決策は、-force_loadを使用することです。これにより、いくつかのライブラリでは-all_loadを効果的に使用できますが、他のライブラリでは使用できません。Xcode - 相対パスでforce_loadを取得する

しかし、これは少なくとも私にとっては新しい問題につながります。ライブラリのパスのの-force_loadを使用すると、リンカは常にライブラリとそのシンボルの間のシンボルの競合を検出します。リンカーは、絶対パスを持つライブラリと相対パスを持つライブラリが異なるライブラリであると考えているため、ライブラリとそのライブラリ自体の間に競合があると考えられます。

Iフラグと絶対パスを使用して、これを避けることができます。しかし、これはすばらしい解決策ではありません。私のドキュメントディレクトリにライブラリのソースコードを保存すると便利です。しかし、ドキュメントディレクトリへのパスは、他のマシンでは異なります。

質問:誰でもの相対パスで作業するにはforce_loadを取得できますか?

EDIT:背景情報については、アプリのプロジェクトにライブラリプロジェクトが含まれている場合、その後、あなたは他のリンカフラグにこれを追加することができ、Xcodeの4でthis question

答えて

36

を参照してください。

-force_load $(BUILT_PRODUCTS_DIR)/<library_name.a> 

あなたは依然として依存関係が必要で、フレームワークとライブラリのリンクフェーズリストにライブラリを追加する必要があります。

EDIT:「-ObjC」正しくロードするカテゴリとライブラリを取得するには:Appleは今、あなたは、単にこのリンカフラグを使用することができますいくつかのXcode 4のリリースのよう述べています。そのフラグはXcode 5でうまく動作しています。人々はまだこの回答を投票していますが、-ObjCフラグが今や最高の解決策であると思われます。

+0

-ObjCフラグは、かなりのステートメントである –

+0

@AlexanderVaseninのいくつかのフレームワークを壊しています。それをサポートする記事へのリンクを付けてバックアップしてください。個人的に私はこれまで聞いたことがありません。 –

+0

例:[link 1](http://www.personagraph.com/ios#faq19)、[link 2](https://www.parse.com/questions/linker-flag-objc-causes-build-失敗した) –

8

これは私のために働いた。上記の回答と同様に、プロジェクトにライブラリを含める必要があります。それはたとえばBaseFoler /サブフォルダ/ libName.aのために、あなたはあなたのライブラリーを置く場所につながるプロジェクト内のフォルダだけのパスについては

-force_load $(SRCROOT)/pathToLibraryFromProject/libname.a 

+0

これは私のために働いた。相対URLだけを入力すると、私にとってはうまくいきませんでした。私はそれが動作するために絶対URLを入力しなければなりませんでした。これはXcode 8.3、Swift 3 –

関連する問題