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

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


当前回答

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

XCode .m vs. mm

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

这为我解决了问题。

其他回答

If you're building from Unity3D 5 and also using a Prime31 plugin and you're getting this error it's probably due to a duplicate .dll. If you look through your warnings in Unity's editor one of them will tell you this and warn that it could cause build errors. To see if this is the case, type P31 in your project search field and it should pop right up, maybe even more than one. The duplicate's will have a ' 1' at the end of the file name. This is probably caused from updating the plugin in editor via the store or the Prime31 menu tab.

别名通常不包含链接到当前版本的版本标识符,在本例中为libz。Dylib链接到libz.1.2.5.dylib。使用基本别名,而不是版本化的别名。

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

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

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