0

iOSアプリにGoogleが提供するadMobを追加していますが、インストールのこの部分で立ち往生しています。プロジェクトビルド情報の[その他のリンカーフラグ]の下に-all_loadを追加します。

そのフラグを追加すると、別のサードパーティライブラリが壊れてエラーメッセージが表示されます。

ld:/Users/josh/ Projects / app / libs / libvt_universal.a(vw_ctype-3279EF26D0C25F3A.o)および/ Users / josh / Projects / app / libs / libvt_universal.a(vw_ctype-34AB9ECアーキテクチャi386

-all_loadを使用せずにadMobライブラリを使用する方法はありますか?たとえば、-force_load $(SOURCE_ROOT)/adMob/libGoogleAdMobAds.aを試しましたが、ld:ファイルが見つかりません:/Users/USERNAME/Desktop/latest/bbbb/APPNAME/adMob/libGoogleAdMobAds.a

4

1 に答える 1

1

Googleが-all_loadの使用を提案する理由は、コードでカテゴリを使用しており、カテゴリを含むObjective-Cライブラリがllvmリンカーによって適切に読み込まれないためです(4.3 xcodeの場合はそうでしたが、新しいclangでは4.4についてはわかりません) )。

ですから、勇気があるなら、all_loadフラグを削除してみてください。それはうまく構築する必要があります。バグが修正されていない場合は、コードを実行するとクラッシュします。これは、ライブラリが使用するカテゴリがロードされていないためです。プロジェクトをビルドする必要があるため、これはどのような場合でも行うのが良いかもしれません。そうでない場合は、最初にこれらの問題を修正できます。

私がお勧めするのは、-force_loadを使用することです。これにより、llvmはadMobライブラリのカテゴリを(とりわけ)ロードします。これを使用するには、ライブラリへの完全修飾パス(つまり、「/」で始まるパス)が必要です。明らかに、ターミナルを使用して実行する場合:

ls -l /Users/USERNAME/Desktop/latest/bbbb/APPNAME/adMob/libGoogleAdMobAds.a

その失敗するだろう。したがって、適切なパス(ハードコードされている)を入力して、プロジェクトを最初にビルドしてから実行できるかどうかを確認します。もしそうなら、後でプロジェクト内でそれを見つけるために使用する適切な$(VAR)が何であるかを理解することができます。

于 2012-08-18T13:56:38.733 に答える