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

    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++是必要的)。

其他回答

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

我在iphone5s上运行app时遇到了这个问题,通过添加arm64到架构解决了这个问题。

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

目标中可能缺少一些类。这通常发生在你重命名/删除/添加新的类文件到你的项目。若要修复,请将新添加的类添加到某些目标。

在Project Navigator中选择类(右侧栏),打开Utilities侧栏(右侧栏),从Utilities中选择File Inspector (File like icon),在Target Membership选项卡下勾选你的目标。这都是为了避免“删除引用”,并再次添加“添加到目标”的技巧。

所以:选择Class -> Utilities (File Inspector) -> Target Membership ->勾选你想要的目标。

常见的原因

导致“架构armv7中未定义的符号”的常见原因有:

You import a header and do not link against the correct library. This is common, especially for headers for libraries like QuartzCore since it is not included in projects by default. To resolve: Add the correct libraries in the Link Binary With Libraries section of the Build Phases. If you want to add a library outside of the default search path you can include the path in the Library Search Paths value in the Build Settings and add -l{library_name_without_lib_and_suffix} (eg. for libz.a use -lz) to the Other Linker Flags section of Build Settings. You copy files into your project but forgot to check the target to add the files to. To resolve: Open the Build Phases for the correct target, expand Compile Sources and add the missing .m files. If this is your issue please upvote Cortex's answer below as well. You include a static library that is built for another architecture like i386, the simulator on your host machine. To resolve: If you have multiple library files from your libraries vendor to include in the project you need to include the one for the simulator (i386) and the one for the device (armv7 for example). Optionally, you could create a fat static library that contains both architectures.


最初的回答:

您没有链接到正确的libz文件。如果你右键点击该文件并在finder中显示它的路径应该在iOS sdk文件夹中的某个地方。这是我的例子

/开发/平台/ iPhoneOS.platform /开发/ sdk / iPhoneOS4.3.sdk / usr / lib

我建议删除引用,然后在目标的构建阶段Link Binary With Libraries部分重新添加它。