Undefined symbols for architecture armv7

IosArmv7

Ios Problem Overview


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?

Ios Solutions


Solution 1 - Ios

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

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

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

Solution 2 - Ios

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.

Solution 3 - Ios

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.

Solution 4 - Ios

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.

https://stackoverflow.com/questions/9334650/linker-error-calling-c-function-from-objective-c

Solution 5 - Ios

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

Solution 6 - Ios

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.

Solution 7 - Ios

I had the same problem when I use admob library, I fixed it changing "Architectures" to "Standard architectures armv7, armv7s" without including 64-bit. Build Settings

Solution 8 - Ios

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

Solution 9 - Ios

I only added the libz.1.2.5.dylib to my project and it worked like a charm.

Steps -

  1. Go to Build Phases.
  2. Link Binary With library - use the '+' button to choose frameworks and libraries to add.
  3. Select libz.1.2.5.dylib from the list.
  4. Build and run.

Solution 10 - Ios

I had a similar issue and saw errors related to "std::"

I changed Build Settings -> Apple LVM 5.0 - Language C++ -> C++ Standard Library

from libc++ (LLVM C++ Standard Library with C++11 support) to libstdc++ (GNU C++ Standard Library)

Solution 11 - Ios

If you have the flag -ObjC under your Target > Build Settings > Other Linker Flags and you're getting this issue, consider removing it. If you intentionally added it because you need to load some Obj-C code from a static library that wouldn't normally be loaded otherwise, IE, an Obj-C category, then you should use -force_load <path> instead of -ObjC.

<path> should be relative to your Xcode project directory. IE, if your directory structure looks like this:

iOSProject
  + iOSAPI.framework
      + iOSAPI
  + iOSAPI.xcodeproj

Then you should have this flag set for Other Linker Flags:

-force_load iOSAPI.framework/iOSAPI

If you want to include multiple libraries like that, then you should include a separate -force_load line for each of them.

-force_load iOSAPI.framework/iOSAPI
-force_load another.framework/another

Solution 12 - Ios

Here's how I got this problem:

I added a .h, .m and NIB from another project by dragging them onto my project navigator. Xcode didn't add them to the Build Phases properly.

Check my answer because I had a similar problem that I was able to solve by doing some steps.

Solution 13 - Ios

I have have multiple @interfaces in the .h file and hadn't yet included the all of the corresponding @implementation directives. Make sure that they are all balanced out.

Solution 14 - Ios

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.

Solution 15 - Ios

Go to your project, click on Build phases, Compile sources, Add GameCenterManager.m to the list.

Solution 16 - Ios

Probably some classes are missing from your target. This usually happens when you rename/remove/add new classes files to your project. To fix add the newly added classes to some targets.

Select the class in the Project Navigator (right sidebar) , open the Utilities sidebar (right sidebar), from the Utilities select the File Inspector (file like icon), under the Target Membership tab tick your targets. This is all to avoid the "Remove reference" and add again with ticking "Add to targets" trick.

So: Select Class -> Utilities (File Inspector) -> Target Membership -> Tick the targets you want.

Solution 17 - Ios

This fixed my problem: The dependency I am using is not supporting armv7. So I had no other option than to remove it. Armv7 is used for only very old iphones anyway (like iphone 4).

  • Go 'Build Settings / All'
  • Set 'Valid Architectures' to 'arm64 arm64e'

Solution 18 - Ios

I didn't find this suggestion here so here it goes: if your project has more than one target (ie one for OSX and one for iOS) then you must link the relevant libraries for each target.. so for example in my case I needed AudioToolbox.. I had to add it once for OSX and once for iOS (under the frameworks folder, you must have a duplicate of each library for each target.. if you see only one.. then that's a red flag)

Solution 19 - Ios

I was facing an issue with PJSIP libraries,

Tried the following in other linker flags in project and able to resolve the error: -framework Foundation -framework UIKit

Above linker flags are used in Siphone Project over github. These settings will help you resolve problems related to linking of C++ libraries.

Solution 20 - Ios

Finally i've figured it out, I solved this issue by adding absent framework to target->Build Phases->Link Binary With Libraries

Solution 21 - Ios

I once had this problem. I realized that while moving a class, I had overwritten the .mm file with .h file on the destination folder.

Fixing that issue fixed the error.

Solution 22 - Ios

I received the 'Undefined symbols for architecture armv7:' error when trying to compile a project that had the target build setting for 'C++ Standard Library' set to 'libc++' (necessary as the project was using some features from C++ 11), and the project included a sub-project that had the same setting set to 'libstdc++' (or compiler default as it is currently).

Changing the sub-project's 'C++ Standard Library' setting to libc++ fixed it, but only after first setting the deployment target for the sub-project to 5.0 or above (5.0 is necessary for libc++).

Solution 23 - Ios

I give you more suggestions that you can check when other common suggestions are not help.

If you link with other project(libxxx.a) you might sometimes meet strange problem which you can find the symbol with tools like nm but they just can not find the symbols in ld. Then you should check if the two projects are built in the same flags, some of them may affect the binary format.

  1. check c++ compiler.
  2. check c++ dialect setting.
  3. check c++ runtime type support. (-frtti/-fnortti)
  4. check if there is .a with the same name appears elsewhere, could be beyond the wanted file in the link path list. remove them.

Solution 24 - Ios

I got this problem when I run app on iphone5s, it was solved by add arm64 to Architectures.

Solution 25 - Ios

I had the same problem. I tried every thing from the huge list of answer but in the end my problem was: I'm working with openCV so I need to combine C++ code in my code. To do this you should change the files which use objective-c and C++ to .mm I didn't changed one file and this file has no connection to the C++ code but I had to change it.

Solution 26 - Ios

I had this issue, when installing shareKit. It worked in the simulator, but not on the device. I removed -all_load from the Other Linker Flag and everything works fine in both simulator and iphone device.

Solution 27 - Ios

In my case, I'd added a framework that must be using Objective C++. I found this post:

https://stackoverflow.com/questions/4562255/xcode-m-vs-mm

that explained how the main.m needed to be renamed to main.mm so that the Objective-C++ classes could be compiled, too.

That fixed it for me.

Solution 28 - Ios

I use to face that issue when the module (file .m) is not in the target that I am working with.

Solution 29 - Ios

For me the problem was that i forget to set value for my constants in the .m (implementation)

file const kFooKey = @"Foo";

Solution 30 - Ios

I also added files through Dragging and Dropping. What I did, I removed references of all the files (Excluding frameworks) then added them again properly via Add Files To Project option, problem gone.

Solution 31 - Ios

If you're building from Unity3D 5 and also using a Prime31 plugin and you're getting this error it's probably due to a duplicate .dll. If you look through your warnings in Unity's editor one of them will tell you this and warn that it could cause build errors. To see if this is the case, type P31 in your project search field and it should pop right up, maybe even more than one. The duplicate's will have a ' 1' at the end of the file name. This is probably caused from updating the plugin in editor via the store or the Prime31 menu tab.

Solution 32 - Ios

For what it is worth, mine was fixed after I went to target->Build Phases->Link Binary With Libraries, deleted the libstdc++.tbd reference, then added a reference to libstdc++.6.0.9.tbd.

Solution 33 - Ios

I was facing the same problem when I included one third party framework.

The issue got resolved when I removed armv7s from the Valid Architectures entry in Build Settings of the target, it starts working.

Solution 34 - Ios

rename your m file (which includes methods funcs) to mm or vice versa will fix your problem. mine solved renaming mm to m or m to mm.

Solution 35 - Ios

Try to implement at least one non-inline function of your derived class. If you don't do this, the linker might avoid creating type info for that class.

Solution 36 - Ios

In Xcode Version 6.3.2 , I solved the exactly same problem by adding Library libxml2.dylib and libz.dylib In Link Binary With Libraries !

Solution 37 - Ios

In my case, I had a similar problem when I created a new branch under source control.

I was able to resolve this problem by simply going Product>Clean

Solution 38 - Ios

I had this warning, when wrote two classes in .h file of another class, but FORGOT to write the implementation for this classes in .m file.

Solution 39 - Ios

Go TARGETS -> General -> Deployment Info -> set Target 8.1 or 10.0

Framework or Library have no ARMV7 Architecture.

Solution 40 - Ios

If you faced this issue with your Flutter project while building in Release mode - that's what helped me:

  1. Set your build system to New Build System in File > Project Settings…
  2. delete folders ios and build_ios from your project folder.
  3. create ios module by executing flutter create . from your project folder.
  4. 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
  1. execute pod install from your project folder
  2. execute flutter pub get from your project folder

now open your Xcode and build or archive it: Product > Build (or Archive)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlex TrottView Question on Stackoverflow
Solution 1 - IosJoeView Answer on Stackoverflow
Solution 2 - IosCortexView Answer on Stackoverflow
Solution 3 - IosAlex ZavatoneView Answer on Stackoverflow
Solution 4 - Iosuser2166865View Answer on Stackoverflow
Solution 5 - IossyoleenView Answer on Stackoverflow
Solution 6 - IoszaphView Answer on Stackoverflow
Solution 7 - IospabloverdView Answer on Stackoverflow
Solution 8 - Iosuser1368045View Answer on Stackoverflow
Solution 9 - Iosgirish_vrView Answer on Stackoverflow
Solution 10 - IosAndrew SoltanView Answer on Stackoverflow
Solution 11 - IosArtOfWarfareView Answer on Stackoverflow
Solution 12 - IosHimanshu AgnihotriView Answer on Stackoverflow
Solution 13 - IosJamesView Answer on Stackoverflow
Solution 14 - IosStanView Answer on Stackoverflow
Solution 15 - IosDhaval SarvaiyaView Answer on Stackoverflow
Solution 16 - IosandreiView Answer on Stackoverflow
Solution 17 - IoschickensView Answer on Stackoverflow
Solution 18 - IosabboodView Answer on Stackoverflow
Solution 19 - IosAdeesh JainView Answer on Stackoverflow
Solution 20 - IoslomecView Answer on Stackoverflow
Solution 21 - Iosuser2158690View Answer on Stackoverflow
Solution 22 - IosSi.View Answer on Stackoverflow
Solution 23 - IosflukeView Answer on Stackoverflow
Solution 24 - IosalexqinbjView Answer on Stackoverflow
Solution 25 - Iosuser2743760View Answer on Stackoverflow
Solution 26 - IosJordanView Answer on Stackoverflow
Solution 27 - IosVito AndoliniView Answer on Stackoverflow
Solution 28 - IosJavier Calatrava LlaveríaView Answer on Stackoverflow
Solution 29 - IosJakub TruhlářView Answer on Stackoverflow
Solution 30 - IosVaibhav SaranView Answer on Stackoverflow
Solution 31 - IosDela TorreView Answer on Stackoverflow
Solution 32 - Iosn8n8babyView Answer on Stackoverflow
Solution 33 - IosEaswaramoorthy KView Answer on Stackoverflow
Solution 34 - IosZen Of KursatView Answer on Stackoverflow
Solution 35 - IosMichael LitvinView Answer on Stackoverflow
Solution 36 - IosStephen ChenView Answer on Stackoverflow
Solution 37 - IosAnthony DitoView Answer on Stackoverflow
Solution 38 - IosNike KovView Answer on Stackoverflow
Solution 39 - Ioskeaton shineView Answer on Stackoverflow
Solution 40 - IosKirill KarmazinView Answer on Stackoverflow