web-dev-qa-db-ja.com

libz.dylibとlibz.1.2.3.dylibとlibz.1.2.5.dylibの比較

私はこれをコメントで尋ねましたが、これは独自の質問に値する問題のようです。

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.dyliblibz.1.2.3.dyliblibz.1.2.5.dylibの違いは何ですか。XCodeとiOS SDKのすべてのインストールで最初のものに安全にリンクできますか?

34
Hyperbole

OSには、多くのバージョンの動的ライブラリが含まれています。これらは、コンパイル時にどのライブラリに対してコンパイルされたかに応じて、さまざまなプログラムで使用されますが、コンパイルするときに、ソースコードにインクルード/インポートするインストール済みヘッダーに対応するバージョンに対してリンクする必要があります。

libz.dylibは、インストールされているヘッダーが使用するのと同じバージョンへのリンクになります。

2つのバージョンlibXYZ.1.dyliblibXYZ.2.dylibがあるとします。libXYZ.dyliblibXYZ.2.dylibへのリンクであり、libXYZ.1.dylibはアプリのOSでも利用可能なレガシーライブラリですlibXYZ.2.dylibがリリースされる前にコンパイルおよび配布されました。 libXYZ.1.dylibはSDKに含まれています。これは、古いバージョンにリンクしたい古いフレームワークが存在する可能性があるためです。

2つのバージョンのヘッダーに非常に似たインターフェースがあるため、コンパイルして実行しても実際の違いはわかりませんが、将来のバージョンでは、古いバージョンが削除されて新しいバージョンが追加され、リンク時にプロジェクトが壊れる可能性があります。

私がそれを正しく理解している場合、リンカーはファイルリンクを逆参照するため、適切なバージョンを見つけてそのdylib名を保持し、アプリの起動時に動的にリンクします。そのため、libz.dylibは(コンパイル時よりも)使用されるパスにはなりません。

4.3 SDKのXcodeインストールにこれが表示されます

/Developer/.../SDKs/iPhoneOS4.3.sdk/usr/include/zlib.h

/* 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

libz.dylib

/Developer/.../SDKs/iPhoneOS4.3.sdk/usr/lib/libz.dylib -> libz.1.2.3.dylib
28
epatel

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に更新されます。この方法で、さまざまなバージョンすべてを調べることができます。

4
Simon Woodside

特定のバージョンの代わりにlibz.dylibでリンクするだけで、コンパイラーはインストールされたSDKで利用可能なバージョンをリンクします。現在インストールされているSDKで利用できない特定のバージョンとリンクすると、リンカーエラーが発生する場合があります。

3

Libz.1.2.3.dylibの代わりにlibz.1.2.5.dylibを使用できます

Libz.1.2.3.dylibを置き換える-----> libz.1.2.5.dylib

0
Akram Khan