这个问题快把我逼疯了,我不知道怎么解决它。

    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并没有帮助,有人有什么想法吗?


当前回答

昨晚我遇到了一个类似的问题,这个问题与我在Xcode中从Finder拖拽一个类有关。

解决方案是选择Build Phases选项卡,然后选择Compile Sources,并确保将类拖到列表中。

其他回答

目标->构建设置-> Apple LLVM编译语言: 将“c++语言方言”和“c++标准库”设置为编译器默认值有助于解决这个问题。

我给你更多的建议,当其他常见的建议没有帮助时,你可以检查。

如果你链接到其他项目(libxxx.a),你有时可能会遇到奇怪的问题,你可以用nm等工具找到符号,但他们就是找不到ld中的符号。然后你应该检查两个项目是否构建在相同的标志中,其中一些可能会影响二进制格式。

检查c++编译器。 检查c++方言设置。 检查c++运行时类型支持。(-frtti / -fnortti) 检查是否有相同名称的.a出现在其他地方,可能超出了链接路径列表中的所需文件。移除它们。

当模块(file .m)不在我正在使用的目标中时,我常常会遇到这个问题。

如果你正在处理iOS5升级,我发现要编译一个目标4.3的项目,我可以将libz.1.2.3重命名。dynlib的项目导航到libz.1.2.5。Dynlib和它编译。

我的iPhoneOS50SDK/usr/lib文件夹没有libz.1.2.3。Dynlib——不知道它是测试版还是自然升级。

我曾经遇到过这个问题。我意识到在移动一个类时,我已经在目标文件夹上用.h文件覆盖了.mm文件。

修复这个问题就修复了错误。