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

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


当前回答

我没有在这里找到这个建议,所以它是这样的: 如果你的项目有多个目标(即一个OSX和一个iOS),那么你必须为每个目标链接相关的库。例如,在我的情况下,我需要AudioToolbox..我不得不为OSX和iOS添加一次(在框架文件夹下,你必须有每个目标的每个库的副本..如果你只看到一个..那么这就是一个危险信号)

其他回答

我没有在这里找到这个建议,所以它是这样的: 如果你的项目有多个目标(即一个OSX和一个iOS),那么你必须为每个目标链接相关的库。例如,在我的情况下,我需要AudioToolbox..我不得不为OSX和iOS添加一次(在框架文件夹下,你必须有每个目标的每个库的副本..如果你只看到一个..那么这就是一个危险信号)

当我加入第三方框架时,我也遇到了同样的问题。

当我从目标的构建设置中的有效架构条目中删除armv7s时,问题得到了解决,它开始工作。

常见的原因

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

在我的例子中,我添加了一个必须使用Objective c++的框架。我找到了这个帖子:

XCode .m vs. mm

这说明了主要的。M需要重命名为main。mm,这样objective - c++类也可以被编译。

这为我解决了问题。

如果您在释放模式下构建您的Flutter项目时遇到了这个问题-这对我有帮助:

Set your build system to New Build System in File > Project Settings… delete folders ios and build_ios from your project folder. create ios module by executing flutter create . from your project folder. open Xcode and: set the IOS Deployment Target to at least 9.0 in PROJECT > Runner check your Signing & Capabilities make sure your Build Configuration is set to Release in Edit Scheme... and build for Generic iOS Device execute pod install from your project folder execute flutter pub get from your project folder

现在打开你的Xcode并构建或存档它:Product > build(或archive)