1. ホーム
  2. ios

[解決済み] アーキテクチャ armv7 の未定義シンボル

2022-02-18 20:42:05

質問

この問題で頭がおかしくなりそうです。

    Undefined symbols for architecture armv7:
  "_deflateEnd", referenced from:
      -[ASIDataCompressor closeStream] in ASIDataCompressor.o
  "_OBJC_CLASS_$_ASIDataDecompressor", referenced from:
      objc-class-ref in ASIHTTPRequest.o
  "_deflate", referenced from:
      -[ASIDataCompressor compressBytes:length:error:shouldFinish:] in ASIDataCompressor.o
  "_deflateInit2_", referenced from:
      -[ASIDataCompressor setupStream] in ASIDataCompressor.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

と関係していると思います。

ld: symbol(s) not found for architecture armv7

しかし、私は追加しました。 libz.1.2.3.dylib ということなのですが、どうにもなりません。

解決方法を教えてください。

一般的な原因

アーキテクチャ armv7 の未定義シンボル(quot)の一般的な原因は以下のとおりです。

  1. あなた ヘッダをインポートしても、正しいライブラリにリンクされない。 . これはよくあることで、特にQuartzCoreのようなライブラリのヘッダーは、デフォルトでプロジェクトに含まれていないため、よくあることです。解決するには

    • に正しいライブラリを追加してください。 Link Binary With Libraries セクションの Build Phases .

    • デフォルトの検索パスの外にあるライブラリを追加したい場合、そのパスを Library Search Paths の値をビルド設定に追加し
      -l{library_name_without_lib_and_suffix} (例:libz.a の場合は -lz ) を Other Linker Flags の部分は Build Settings .

  2. あなた ファイルをプロジェクトにコピーしたが、ファイルを追加するターゲットをチェックするのを忘れた。 . 解決するには

    • を開いてください。 Build Phases を正しいターゲットに展開します。 Compile Sources を追加し、足りない .m ファイルです。もしこれがあなたの問題なら、upvoteしてください 以下、Cortexの回答 をご覧ください。
  3. あなた 別のアーキテクチャ向けに構築された静的ライブラリをインクルードする。 i386のように、ホストマシン上のシミュレータを使用します。解決するには

    • ライブラリベンダーから複数のライブラリファイルをプロジェクトに含める場合、シミュレータ用(i386)とデバイス用(例:armv7)を含める必要があります。

    • オプションで ファットスタティックライブラリ 両方のアーキテクチャを含んでいます。



オリジナルの回答

正しいlibzファイルに対してリンクされていません。ファイルを右クリックしてファインダーで表示すると、そのパスは iOS sdk フォルダのどこかにあるはずです。例えば、私の場合は以下の通りです。

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib

参照を削除してから、ターゲットの Link Binary With Libraries セクション Build Phases で再度参照を追加することをお勧めします。