34

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

XCodeの3つの異なるインストールとiOSSDKの2つの異なるインストールの間で共有されるプロジェクトがあります。現時点では、関係する開発者を統合することはできません。

iOS 5 Betaをインストールしたとき、XCode4.2libz.1.2.3.dylibはどこにも見つかりませんでした。に対するリンクがこれを処理することを発見しlibz.1.2.5.dylibましたが、これはXCodeおよびiOSSDKの他のアクティブなインストールと互換性がありませんでした。

私はこれをオンラインで調べて、上記の提案とこの提案を発見しました。前者は私にはうまくいきません、そして後者は私を緊張させます。

libz.dylibでは、の違いは何ですか?XCodelibz.1.2.3.dyliblibz.1.2.5.dylibiOS SDKのすべてのインストールで最初のものに安全にリンクできますか?

4

4 に答える 4

28

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

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

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

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

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

これは、4.3SDKの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
于 2011-08-03T21:14:54.937 に答える
4

それらがどのように機能するかをファインダーで簡単に確認できます。XCodeで、ライブラリの1つを「Finderに表示」します。次に、libz.dylibと[GetInfo]を1回クリックします。「オリジナル」は次のとおりです。

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

于 2011-11-12T05:28:52.880 に答える
3

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

于 2013-06-12T08:50:59.830 に答える
0

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

libz.1.2.3.dylibを置き換えます----->libz.1.2.5.dylib

于 2013-05-29T13:20:09.893 に答える