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

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


当前回答

我在.h文件中有多个@接口,还没有包括所有相应的@实现指令。确保它们都平衡了。

其他回答

如果你在你的目标>构建设置>其他链接标志下有-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

我也有类似的问题。在_OBJC_CLASS_$_后面的类名实际上是我的类。原因是我没有勾选“添加到目标”,当我拖动源代码文件到导航列表。

我的解决方案是:

从导航列表中删除类,并选择“仅删除引用” 再次拖动源代码文件,并确保“添加到目标”复选框被勾选。复选框就在“需要时复制”和“创建组”下面。

这解决了我的问题:我正在使用的依赖不支持armv7。所以我别无选择,只能把它切除。Armv7只用于非常老的iphone(比如iphone 4)。

点击“构建设置/全部” 设置“有效架构”为“arm64 arm64e”

下面是我是如何得到这个问题的:

我从另一个项目中添加了.h, .m和NIB,把它们拖到我的项目导航器上。Xcode没有正确地将它们添加到构建阶段。

检查我的答案,因为我有一个类似的问题,我可以通过做一些步骤来解决。

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