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

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


当前回答

当我试图编译一个将“c++标准库”的目标构建设置设置为“libc++”的项目时,我收到了“架构armv7的未定义符号:”错误(必要的,因为项目使用了c++ 11的一些功能),并且该项目包括一个具有相同设置设置为“libstdc++”的子项目(或编译器默认值,因为它目前)。

将子项目的“c++标准库”设置更改为libc++可以修复这个问题,但前提是首先将子项目的部署目标设置为5.0或以上(5.0对于libc++是必要的)。

其他回答

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

XCode .m vs. mm

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

这为我解决了问题。

回到你的项目,点击Build phases, Compile sources, Add GameCenterManager。M到列表上。

尝试实现派生类的至少一个非内联函数。如果不这样做,链接器可能会避免为该类创建类型信息。

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

当我加入第三方框架时,我也遇到了同样的问题。

当我从目标的构建设置中的有效架构条目中删除armv7s时,问题得到了解决,它开始工作。