web-dev-qa-db-ja.com

アーキテクチャi386の未定義シンボル: "_deflate"、libMo.aのPlatCompress(enumCompressOperation、CompressCookie *、void *、long)から参照

SUPを使用してネイティブiOSアプリケーションを実行しています。ドキュメントに従って。ライブラリを含め、Xcodeでリンクパスを指定しました。ビルド中に次のエラーが発生します:

Undefined symbols for architecture i386:
  "_deflate", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in         libMo.a(tlplatcompress.o)
  "_deflateEnd", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_deflateInit_", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
  "_deflateParams", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
  "_inflate", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_inflateEnd", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_inflateInit_", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*,  long), void*, void**) in libMo.a(tlplatcompress.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

このエラーを解決する方法を教えてください。SUPを使用したネイティブiOS開発は初めてです。

ありがとう。

55
bapi

私も同じエラーがありました。

ターゲットからフレームワークにlibz.dylibを追加-> Build Phasesタブ-> Link Binaries With Libraries、

それがあなたのために働くことを願っています。

注:libz.dylibが見つからない場合は、libz.tbdを追加してみてください

142
Dhaval H. Nena

Xcode 7以降、libz.dylibを追加する代わりに、これを行う必要があります。

  • プロジェクトBuild Settingsタブに移動します
  • Other Linker Flagsを検索
  • -lzをリンカーフラグとして追加します(スクリーンショットを参照)
  • Productメニューで、再度ビルドする前にCleanを選択します

lz link option

39
Abhi Beckert

アーキテクチャi386の未定義シンボル:

  "_deflate", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in         libMo.a(tlplatcompress.o)
  "_deflateEnd", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_deflateInit_", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
  "_deflateParams", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*, long), void*, void**) in libMo.a(tlplatcompress.o)
  "_inflate", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_inflateEnd", referenced from:
      PlatCompress(enumCompressOperation, CompressCookie*, void*, long) in libMo.a(tlplatcompress.o)
  "_inflateInit_", referenced from:
      StartCompression(enumCompressOperation, unsigned char, long (*)(void*, void*,  long), void*, void**) in libMo.a(tlplatcompress.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

私も同じ問題を抱えていました。libz.dylibライブラリを含めなかったと思います。

そうするには:

  1. 対象セクションに移動
  2. ビルドフェーズタブ
  3. バイナリをライブラリにリンクする
  4. +ボタンをクリックします
  5. libz.dylibを検索
  6. 追加ボタンのクリック。
19
asheesh Verma

1.対象セクションに移動

2.ビルドフェーズタブ

3.ライブラリとリンクバイナリ

4. +ボタンをクリック

5. libz.tbd(またはlibz.dylib)を検索します

6. [追加]ボタンをクリックします。

10
Vinoth Anandan