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

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


当前回答

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

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

其他回答

如果你在你的目标>构建设置>其他链接标志下有-ObjC标志,你会遇到这个问题,考虑删除它。如果你故意添加它是因为你需要从一个静态库加载一些Obj-C代码,否则通常不会加载,IE,一个Obj-C类别,那么你应该使用-force_load <path>而不是-ObjC。

<path>应该相对于你的Xcode项目目录。IE,如果你的目录结构是这样的:

iOSProject
  + iOSAPI.framework
      + iOSAPI
  + iOSAPI.xcodeproj

然后你应该将这个标志设置为其他链接器标志:

-force_load iOSAPI.framework/iOSAPI

如果你想像这样包含多个库,那么你应该为每个库包含一个单独的-force_load行。

-force_load iOSAPI.framework/iOSAPI
-force_load another.framework/another

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

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

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

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

最后我想明白了,我通过添加缺少框架的目标->构建阶段->链接二进制库解决了这个问题