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

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


当前回答

对我来说,问题是我忘记在.m(实现)中为我的常量设置值

file const kFooKey = @"Foo";

其他回答

为了它的价值,我的是固定后,我去了目标->构建阶段->链接二进制与库,删除libstdc++。TBD引用,然后添加了对libstdc++.6.0.9. TBD的引用。

常见的原因

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

我在.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

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