2009-03-08 12 views
7

私はiPhone用の静的ライブラリを作成しています。私がやっていることが推奨されているのか、別のアプローチをとるべきかと思います。iPhone/CocoaTouchのライブラリからライブラリにリンクする適切な方法

私が書いている静的ライブラリはlibxml2に依存しています。 libxml2には、動的ライブラリ(dylib)と静的ライブラリ(a)があります。私は2つのアプローチを試みました。

アプローチ1 - 私は「-lxml2」を追加することにより、静的ライブラリにリンクしようとすると、「他のリンカーフラグ」へのビルドは、次のメッセージで失敗します - 私が正常にリンクすることができ

/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/libtool: file: -lxml2 is not an object file (not allowed in a library) 

アプローチ2私の静的ライブラリからの動的ライブラリに対して、これはiPhone上で許可されているか(または適切な方法)はわかりません。私は静的ライブラリを構築していますが、Appleはダイナミックライブラリとリンクする静的ライブラリを許可していますか?私はまだ静的ライブラリについて学んでいますが、私の理解から、dylibのコードは私のコードと組み合わされて1つのライブラリになるので、dylibとリンクすることは問題ではありません。

は、要約すると:[?ビルドが、これは正しいと受け入れられる]

  • mylibrary.a - - > libxml2.a [動作しません]
  • mylibrary.a> libxml2.dylib

答えて

-8

アップルでは、​​SDKに付属のもの以外のフレームワークやライブラリをリンクすることはできません。

マルコ

+1

実際、XCodeではこれが問題ありません。しかし、抽象的には、StackOverflowはすばやく簡単に*正しい答えを見つける場所にすべきです!あなたが知らない、またはあなたが確信が持てない場合は、回答として投稿しないでください。コメント内の質問を明確にするか、正しい答えを知るまで研究をしてください! :) – Olie

8

libxml2.dylibは、SDKで提供されています。 Xcodeのターゲットノード/アプリをダブルクリックし、次に[一般]の下の[リンクされたライブラリ]の+をクリックします。libxml2.dylibがそのリストにあります。

0:42この中でScreencastにCoreGraphicsがどのようにプロジェクトに追加されているのかが分かります。

+0

右。私はリンクする方法*を理解しています。私の質問は、静的ライブラリから外部ライブラリにリンクするための適切な標準ですか?あなたは良い点を作っていますが、私は見落としてしまいます。 libxml2.dylibはSDKとともに配布されるため、おそらく許可されています。 – Caged

+1

SDKから利用可能なdylibの静的ライブラリにリンクしないことをお勧めします。彼らは他のフレームワークで使用することができ、バージョンの問題になる可能性があります。つまり、Foundation.frameworkはlibxml2を取り込みます – epatel

0

ライブラリを静的に他の静的ライブラリにリンクすることはできません。これは、他の静的ライブラリに依存するフレームワークとライブラリが、リンクバイナリライブラリのビルドフェーズまたはその他のリンカフラグのビルド設定に手動でそれらを追加するように消費者に求めている理由です。

関連する問題