静的ライブラリプロジェクトのリンクに失敗する - Xcode4

SPECIAL


同一ワークスペース内の静的ライブラリのリンクに失敗する

Xcode4 で、ひとつのワークスペース内に、静的ライブラリとそれを使用するアプリケーションのプロジェクトを作成して、アプリケーションのプロジェクトから静的ライブラリをリンクしようとしたときに、上手く行かないことが幾度とありました。

 

ひとつ目の状況としては、アプリケーションの TARGETS から "Build Pharse" で、静的ライブラリプロジェクトを "Link Binary With Libraries" に登録しても、その静的ライブラリが見つからずに赤字で表示されてしまう感じです。

このとき、静的ライブラリのプロジェクトの "Products" に表示されているオブジェクトを見ると "Full Path" が空になっていたので、何か設定を間違えているのかもと思ったのですけど、どうやらこれは、ターゲットをシミュレーターではなく iPhone 実機にしてあげることで、静的ライブラリが生成できました。

いったん、静的ライブラリを作ってしまえば、後はシミュレーターをターゲットにしても大丈夫そうな感じがしました。

 

また、そのようにしてライブラリが生成されても、シミュレーター用にビルド時に、次のようにリンクエラーが発生してしまう場合もありました。

ld: warning: ignoring file /Users/tomohiro/Library/Developer/Xcode/DerivedData/EZ-NET_IP_Phone-gekbbspdsqwvgaiqhshyxxoswhk/Build/Products/Debug-iphoneos/libEzLibraryNetwork2.a, file was built for archive which is not the architecture being linked (i386)

これはどうやら、ビルド 設定で "Debug" と "Release" 以外に独自の設定を追加している場合などで、発生することがあるような感じでした。

このようなリンクエラーが発生した場合には、静的ライブラリプロジェクトとアプリケーションプロジェクトとで、同じ設定名でビルドされるように Scheme にある "Run" や "Archive" 等の Build Configuration を調整してあげることで、リンクエラーが出ないようになりました。

 

これらはどれも試行錯誤であまり確からしいことはしていませんけど、はまってついつい時間ばかりが過ぎることが多かったので、備忘録というか手掛かりとして、記しておくことにしました。