web-dev-qa-db-ja.com

iOSでzlibをインポートするときのエラー:シンボルが見つかりませんcollect2:ld

IPhoneアプリケーションとBradLarsonから提供されたMoleculesのサンプルコードをモックアップしたソースコードに<zlib.h>を含めましたが、プロジェクトをビルドすると、次のようなエラーが返されます。これがライブラリリンクの問題なのか、それとも何か他のものが足りないのか、誰かが私に指摘できますか?

"_deflate", referenced from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o "_inflateEnd", 
referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "inflateInit2", 
referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "_inflate", 
referenced from: -[NSData(Gzip) initWithGzippedData:] in NSData+Gzip.o "_deflateEnd", 
referenced from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o "deflateInit2", referenced 
from: -[NSData(Gzip) gzipDeflate] in NSData+Gzip.o ld: symbol(s) not found collect2: ld 
returned 1 exit status
28
issac

ターゲットのBuild Settingsタブ、下にスクロールしてOther Linker Flagsセクションと確認してください-lzはフィールドにあります。これは組み込みのzlibにリンクし、エラーはなくなるはずです。

リンカーフラグを変更した後、再度ビルドする前に、CleanメニューからProductを選択する必要があります。

lz screenshot

82
Ben Gottlieb

プロジェクトにlibzを追加します。これを行うには、Xcodeで次の手順に従います。

  1. プロジェクトを開き、プロジェクトターゲットを選択してから、ツールバーの青いプロジェクト情報アイコンをクリックします(または⌘Iを押します)。
    Example 1
  2. 画面の左下隅にある[+]ボタンをクリックしてライブラリを追加し、ライブラリリストの一番下までスクロールして、libz.dylibを選択します。 [追加]ボタンをクリックします。
    Example 2
  3. [追加]をクリックすると、リンクされたライブラリのリストにライブラリ名が表示されます。これで、リンクエラーなしでプロジェクトをビルドできるようになります。
    Example 3

これと同じ方法を使用して、リストから任意のライブラリを追加できます。ライブラリがリストに表示されない場合は、それが標準のiPhone SDKの一部ではないことがわかります。ソリューションを再考するか、ライブラリを静的に構築して、ターゲットをそれにリンクする必要があります(可能な場合)。

47
Jason Coco