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

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


当前回答

常见的原因

导致“架构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部分重新添加它。

其他回答

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

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

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

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

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

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

常见的原因

导致“架构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部分重新添加它。