私はこれをコメントで尋ねましたが、これは独自の質問に値する問題のようです。
XCodeの3つの異なるインストールとiOS SDKの2つの異なるインストール間で共有されるプロジェクトがあります。現時点では、関係する開発者を統一することはできません。
IOS 5ベータ版とXCode 4.2をインストールしたとき、libz.1.2.3.dylib
はどこにも見つかりませんでした。 libz.1.2.5.dylib
へのリンクがこれを処理したことを発見しましたが、これはXCodeおよびiOS SDKの他のアクティブなインストールと互換性がありませんでした。
私はこれをオンラインで調査し、上記の提案と this 提案を発見しました。前者はうまくいかず、後者は緊張します。
では、libz.dylib
、libz.1.2.3.dylib
、libz.1.2.5.dylib
の違いは何ですか。XCodeとiOS SDKのすべてのインストールで最初のものに安全にリンクできますか?
OSには、多くのバージョンの動的ライブラリが含まれています。これらは、コンパイル時にどのライブラリに対してコンパイルされたかに応じて、さまざまなプログラムで使用されますが、コンパイルするときに、ソースコードにインクルード/インポートするインストール済みヘッダーに対応するバージョンに対してリンクする必要があります。
libz.dylib
は、インストールされているヘッダーが使用するのと同じバージョンへのリンクになります。
2つのバージョンlibXYZ.1.dylib
とlibXYZ.2.dylib
があるとします。libXYZ.dylib
はlibXYZ.2.dylib
へのリンクであり、libXYZ.1.dylib
はアプリのOSでも利用可能なレガシーライブラリですlibXYZ.2.dylib
がリリースされる前にコンパイルおよび配布されました。 libXYZ.1.dylib
はSDKに含まれています。これは、古いバージョンにリンクしたい古いフレームワークが存在する可能性があるためです。
2つのバージョンのヘッダーに非常に似たインターフェースがあるため、コンパイルして実行しても実際の違いはわかりませんが、将来のバージョンでは、古いバージョンが削除されて新しいバージョンが追加され、リンク時にプロジェクトが壊れる可能性があります。
私がそれを正しく理解している場合、リンカーはファイルリンクを逆参照するため、適切なバージョンを見つけてそのdylib名を保持し、アプリの起動時に動的にリンクします。そのため、libz.dylib
は(コンパイル時よりも)使用されるパスにはなりません。
4.3 SDKのXcodeインストールにこれが表示されます
/* zlib.h -- interface of the 'zlib' general purpose compression library
version 1.2.3, July 18th, 2005
Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler
/Developer/.../SDKs/iPhoneOS4.3.sdk/usr/lib/libz.dylib -> libz.1.2.3.dylib
Finderでどのように機能するかを簡単に確認できます。 XCodeでは、ライブラリの1つである「Finderに表示」。 libz.dylibをクリックして、「情報を見る」をクリックします。 「オリジナル」は次のとおりです。
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/libz.1.2.5.dylib
(iOS 5 SDKのXCode4.2現在)
したがって、現時点ではバージョン1.2.5へのシンボリックリンクです。将来的には、最新の1.x.xに更新されます。この方法で、さまざまなバージョンすべてを調べることができます。
特定のバージョンの代わりにlibz.dylibでリンクするだけで、コンパイラーはインストールされたSDKで利用可能なバージョンをリンクします。現在インストールされているSDKで利用できない特定のバージョンとリンクすると、リンカーエラーが発生する場合があります。
Libz.1.2.3.dylibの代わりにlibz.1.2.5.dylibを使用できます
Libz.1.2.3.dylibを置き換える-----> libz.1.2.5.dylib