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

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


当前回答

另一个可能导致“未定义符号”链接错误的原因是试图从.mm文件调用C函数。在这种情况下,您需要使用extern“C”{…}当您导入头文件时。

从objective - c++调用C-Function链接器错误

其他回答

我遇到了类似的问题,我必须在每个项目配置(调试、发布和部署)和目标的构建设置中检查“仅构建活动体系结构”。

我还通过拖放添加了文件。我所做的,我删除了所有文件的引用(不包括框架),然后通过添加文件到项目选项正确地添加它们,问题消失了。

我也有同样的问题。我尝试了答案列表中的每一种方法,但最终我的问题是: 我正在使用openCV,所以我需要在我的代码中结合c++代码。要做到这一点,你应该将使用objective-c和c++的文件更改为.mm 我没有改变一个文件,这个文件没有连接到c++代码,但我必须改变它。

在我的例子中,我添加了一个必须使用Objective c++的框架。我找到了这个帖子:

XCode .m vs. mm

这说明了主要的。M需要重命名为main。mm,这样objective - c++类也可以被编译。

这为我解决了问题。

我有这个警告,当在另一个类的.h文件中写两个类时,但忘记在.m文件中写这个类的实现。