开发者社区> ghost丶桃子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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 vote249down 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: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
解决办法:undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
解决办法:undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
562 0
SAP Digital Asset Management by OpenText for CRM
SAP Digital Asset Management by OpenText for CRM
50 0
ubunut 安装winehq + 官网轻聊版QQ
一、添加ppa的官网资源【我没用这个方法安装wine】 sudo add-apt-repository ppa:ubuntu-wine/ppa sudo apt-get update sudo apt-get install wine1.8 winetricks sudo apt-get remove wine1.8 winetricks   一、安装最新版本的winehq
2185 0
Hexo 入门指南(六) - sitemap、rss 和部署
sitemap & rss 切换到blog根目录下,输入: $ npm install hexo-generator-feed $ npm install hexo-generator-sitemap 之后重启博客,访问/atom.xml和/sitemap.xml,会发现已经生成了。
932 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Introduction to some Arm64 Arc
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载