Undefined symbols for architecture armv7

This problem has been driving me crazy, and i can't work out how to fix it...

    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

I think it has to do with:

ld: symbol(s) not found for architecture armv7

but I have added: libz.1.2.3.dylib and it's not helping, anyone got any ideas?

share |improve this question
 

28 Answers

up vote 249down voteaccepted

Common Causes

The common causes for "Undefined symbols for architecture armv7" are:

  1. 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.

  2. 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.

  3. 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.

 


Original Answer:

You have not linked against the correct libz file. If you right click the file and reveal in finder its path should be somewhere in an iOS sdk folder. Here is mine for example

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib

I recommend removing the reference and then re-adding it back in the Link Binary With Libraries section Build Phases of your target.

share |improve this answer
 
2 
It may also be because you need to add the word "-licucore" in project settings / Other Linker Flags. It was added automatically for my debug build but not the release one so wouldn't compile. –  JulianB Nov 2 '11 at 23:25 
3 
I had the same issue. Didn't really read the install notes properly so hadn't noticed that the new version of bugsense needs libz binary added in the build phases. –  Max MacLeod Nov 8 '12 at 9:33
   
This is by far the most useful post on StackOverflow! Thank You! –  Asciant Apr 7 '13 at 0:23
   
Are you sure that you've included an @implementation section in your respective .m file for all classes you've declared in your header file? –  slcott Jun 13 '13 at 2:27
2 
I just want to add I think it was really respectful of you to reference another answer to this question and tell us to up vote it if that helped. –  Andrew Sep 16 '13 at 0:03

I had a similar issue last night and the problem, was related to the fact that I had dragged a class from the Finder to my project in Xcode.

The solution was to go the the Build Phases tab and then the Compile Sources and make sure you drag the class to the list.

share |improve this answer
 
34 
THANK YOU! (How is XCode allowed to be this crap?) –  Reuben Scratton May 9 '12 at 18:30
1 
I owe my sanity to you –  Julian Coltea Jul 23 '12 at 18:48
3 
I wish I had realized this was the answer I was looking for earlier- Alternatively you can make sure to check 'Add to targets' when copying classes. –  T. Markle Aug 22 '12 at 4:33 
1 
And another life saved! I would like to express my deepest gratitude! –  Eduardo Nov 13 '12 at 10:00
1 
Another way to fix this is select file that is said to be missing. and open the "Utilities" slide out bar. (Thats the far right one) And choose the "File Inspector". Then make sure there is a check in the project under "Target Membership". I'm using Xcode 4.6.2 –  zingle-dingle May 7 '13 at 16:57

I had a similar issue and I had to check "Build Active Architecture Only" on each of the Project configurations (Debug, Release and Deployment) and in the Build Settings of the Target.

share |improve this answer
 
1 
Also did the trick for me. Was just needed in the main project though. –  Kirualex Oct 10 '12 at 10:20
   
it works for me! Thanks –  VietHung Mar 31 at 3:42

Another possible cause of "undefined symbol" linker errors is attempting to call a C function from a .mm file. In this case you'll need to use extern "C" {...} when you import the header files.

Linker error calling C-Function from Objective-C++

share |improve this answer
 
   
You save me!!!! –  alexqinbj May 21 '13 at 3:00

I had a similar issue with that. The class name after _OBJC_CLASS_$_ was actually my class. The reason was I didn't tick "Add to Target" when I drag the source code files into navigation list.

My solution was:

  1. delete the class from the navigation list and choose "remove reference only"

  2. drag the source code files again and make sure the tick box for "add to Target" is ticked. The tick box is just under "Copy if needed" and "Create group".

share |improve this answer
 
   
Just to add: although this is NOT THE MOST COMMON CAUSE of the error, I just your answer (didn't tick the box) happen to me now. –  Adam Jun 28 '12 at 12:06

There is usually a alias without the version identifier that is linked to the current version, in this case libz.dylib is linked to libz.1.2.5.dylib. Use the base alias instead of the versioned one.

share |improve this answer
 

Under Target -> Build Settings -> Apple LLVM compiler language: setting 'C++ Language Dialect' and 'C++ Standard Library' to Compiler default helped solve it.

share |improve this answer
 

I ran into this error when working with Google Maps framework. Under the "Build Settings" tab for the project, try changing/toggling "Build Active Architecture Only" from Yes to No after changing framework configurations. This was a small quirky trick that worked for me.

enter image description here

share |improve this answer
 

http://stackoverflow.com/a/10415850/1092219 Check My answer from the above link I have an similar problem that are solved with me by doing some steps that are be written in the above link try it i think you should get benefited.:)

share |improve this answer
 

if you're dealing with the iOS5 upgrade, I found that for compiling a project written to target 4.3, I could just rename libz.1.2.3.dynlib in the Project Navigator to libz.1.2.5.dynlib and it compiled.

My iPhoneOS50SDK/usr/lib folder has no libz.1.2.3.dynlib--don't know whether it's a beta thing or just natural upgrade.

share |improve this answer
 
 
 
欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!
















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/3920409.html ,如需转载请自行联系原作者

### 回答1: undefined symbols for architecture x86_64 意思是在编译或链接时,找不到指定的符号或函数。这通常是由于缺少库文件或头文件,或者代码中存在语法错误或逻辑错误导致的。需要检查代码和依赖项,以解决这个问题。 ### 回答2: “undefined symbols for architecture x86_64”这个错误信息通常出现在使用C/C++语言进行编程时。这个错误表示在链接时缺少符号,编译器无法找到函数或变量的定义。在x86_64架构中,符号可能是函数、变量或其他代码,因此需要通过特定的符号解析过程来定义他们。 这个错误可以通过以下方法解决: 1.检查代码中是否有定义所有需要的函数和变量,如果有遗漏,需要添加定义。 2.检查头文件和库文件是否正确包含,必须确保所有必需的头文件和库文件都被正确链接。 3.检查编译器选项和链接器选项是否正确设置。如果编译时使用了新的标志或选项,可能需要更新链接器选项。 4.如果代码中使用了某些外部库的函数,则需要确保库已经被正确添加到链接器中。 5.如果使用了静态库,那么需要确保发布的静态库文件与正在编译的代码是匹配的。 在解决了上述问题后,编译器会将代码重新链接,以确保所有符号被正确解析。此时,就可以消除“undefined symbols for architecture x86_64”的错误提示,顺利完成编译和链接过程。 ### 回答3: "undefined symbols for architecture x86_64"是一种错误信息,通常出现在使用编译器或链接器编译和构建程序的过程中。这个错误信息表明,编译器或链接器无法找到代码中引用的某些函数或变量的定义。 这个错误信息提示中的“architecture x86_64”表示代码的编译架构是x86_64,即64位的x86架构。这个错误还可以在其他架构上出现,如ARM架构等。 这种错误通常是由于程序中调用的某些库或函数没有正确地链接到程序中,或者库或函数的定义没有包括在项目中导致的。解决这个问题的一种方法是检查相关的库或函数是否正确地链接到程序中,并确保它们的定义包括在项目中。可以使用命令行工具或IDE中的链接器选项来解决这个问题。 此外,也有可能是由于程序中使用了已过时的函数或库,或者程序中的代码出现了错误。在这种情况下,需要检查代码并修复错误,或者使用更新的函数或库来替换旧代码。 总之,“undefined symbols for architecture x86_64”是一个指出编译/链接过程中可执行文件依赖库不匹配或者找不到库函数的错误信息,需要检查相关链接库、函数定义文件和编译器选项并修正代码错误,以解决此问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值