Undefined symbols for architecture arm64
Asked Answered
L

46

278

I am getting a Apple Mach-O Linker Error everytime I import a file from CocoaPods.

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64

I get about 12 of these, for the various Pods I use.

I am trying to build for the iPhone 5S using XCode 5.

I've been trying various solutions here on SO, but haven't got any of them to work yet.

How do I fix this Apple Mach-O Linker Error?


Just found another warning that might be interesting, I hope this leads me to the solution:

Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked (arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a

Lording answered 6/10, 2013 at 20:47 Comment(3)
Simple Solution Go to Target ->Linking -> other linker Flag and add $(inherited) in other linker flag in both Debug and Release.Hulbard
In my case the issue was with a Swift package I had added as a remote dependency to an Xcode project. The Swift package compiled successfully on its own despite missing a dependency in Package.swift. This is because one of the included dependencies had the same exact dependency, so the project compiled successfully using the indirect dependency; but when imported as a dependency itself, it did not. The solution was adding the missing dependency to the library's Package.swift.Bridging
In my case, using flutter_unity_widget and "Export IOS (Debug)" from Unity, I got this as a build error on the Flutter app, where all the undefined symbols were related to il2cpp::utils::Debugger::. I was able to get around this problem by just always doing "Export IOS (Release)" from Unity instead. I'm still able to build the Flutter app for debugging on an iPhone, even though the Unity library is built for release.Parol
S
273

If your Architectures and Valid Architectures are all right, you may check whether you have added $(inherited) , which will add linker flags generated in pods, to Other Linker Flags as below: enter image description here

Shantishantung answered 13/11, 2014 at 7:33 Comment(2)
also if this still doesn't work, add @(inherited) to Library Search Paths too.Reiser
I'm working with Xcode 7.2 and in Other Linker Flags -> Debug I see: -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC ... here I added $(inherited) but it doesn't workMccloskey
E
124

The issue is that the cocoapods have not been built for arm64 architecture yet thus they cannot be linked when you build them. Likely you cannot use those packages until they are updated and use that architecture. You can fix the linker error by going to project -> target (your project name) -> build settings and change architectures to standard architectures (armv7, armv7s), and valid architectures to armv7, armv7s.

Note though, this means you won't get the full power of the 64 bit processor. You said you are building for the 5s, so there may be some reason you need this. If you for some reason absolutely need that power (perhaps you are building a game), and desperately need those files, you could submit a pull request and then recompile the project to arm64 by setting those same fields to arm64 in the files you pulled from the open source projects. But, unless you really need these files to be 64 bit compatible, that seems like a bit of overkill for now.

EDIT: Some people also reported that setting Build For Active Architectures to YES was also necessary to solve this problem.

As of 2014-04-28 the setting should look something like this:

enter image description here

Engaging answered 6/10, 2013 at 21:16 Comment(8)
Aside: you can use the file command in Terminal to tell what architectures a static library supports.Gasperoni
These suggestions didn't fix it for me... I still get "Pods was rejected as an implicit dependency for libPods.a because its architectures arm64 didn't contain all required architectures armv7 armv7sStafani
@Stafani this happened to the initial poster. It looks like the solution is to also set "Build For Active Architectures" to "yes."Engaging
Actually the solution that worked for me was to set it to "No" but also had to do this for the "Pods" project in the workspace, since they're separate.Stafani
This is no longer a solution. Apple now demands support for 64 bit for all deployments.Bullate
I tried it with the method listed in the answer and it was still giving me issues (but with armv7s now). It looks like the latest version of OpenCV is the culprit. I tried it with v2.4.9.1 and the app now builds fine. This is what I have in the Podfile: pod 'OpenCV', '~> 2.4.9.1'Trews
#18376916Calabrese
This is not the Solution, all apps need support for 64 bit now. @Shantishantung solution is the correct one.Adolphadolphe
U
52

I solved this problem by setting that:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

Unkennel answered 28/11, 2013 at 3:23 Comment(3)
No more build errors, up-to this point it is OK. But while uploading the archived build, I'm getting arm64 bit missing error as arm64 bit support is a compulsion from Feb 1, 2015.Carola
when you say setting "ARCHS=XXX", where to set? Im new to iOS and I use swift.Berey
@larry I'm not sure is it work to swift,but you can set this in "Build settings"Unkennel
D
50

I ran into the same/similar issue implementing AVPictureInPictureController and the issue was that I wasn't linking the AVKit framework in my project.

The error message was:

Undefined symbols for architecture armv7:
   "_OBJC_CLASS_$_AVPictureInPictureController", referenced from:
       objc-class-ref in yourTarget.a(yourObject.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

The Solution:

  1. Go to your Project
  2. Select your Target
  3. Then, go to Build Phases
  4. Open Link Binary With Libraries
  5. Finally, just add + the AVKit framework / any other framework.

Hopefully this helps someone else running into a similar issue I had.

Dorsoventral answered 4/11, 2015 at 19:57 Comment(1)
Yeah, worth mentioning that this is an error that gets thrown if you're missing a framework. One clue is you try removing architectures and the next/remaining one fails too...Mirabella
C
44

I also encountered the same problem , the above methods will not work . I accidentally deleted the files in the following directory on it .

Folder emplacement:

~/Library/Developer/Xcode/DerivedData/

enter image description here

Cleaning answered 4/3, 2016 at 1:40 Comment(5)
Thank you! I would like to add an hints: the folder is under /User/yourname/Library/Developer/XCode/DerivedDataFoxing
You should also be able to delete derived data using the terminal: rm -rf ~/Library/Developer/Xcode/DerivedDataMizuki
Probably sameish as this answer, but "Clean build folder" helped me. ⌥⇧⌘KBandit
i don't understand why you should delete these files?Sarmatia
Many times this problem is caused by caching.Cleaning
S
26

Set Architectures to armv7 armv7s, Build Active Architecture Only to NO, for every target in the project, including every one in Pods

Shrum answered 25/3, 2014 at 5:3 Comment(1)
Worked sorta... Now I am getting "Invalid bitcode signature" error.Orientalize
D
21

I fixed mine by checking the selected implementation files in the target membership on the right side. This is useful especially in dealing with extensions i.e. custom keyboards.

Target Membership

Deal answered 12/10, 2015 at 12:38 Comment(0)
G
11

Here are some explanations why build_active_architecture is set to NO. Xcode now detects which devices you have connected and will set the active architecture accordingly. So if you plug a 2nd generation iPod Touch into your computer, Xcode should set the active architecture to armv6. Building your target with the above Debug configuration will now only build the armv6 binary to save time (unless you have a huge project you may not notice the difference but I guess the seconds add up over time).

When you create a Distribution configuration for publishing to the App Store, you should make sure this option is not set, so that Xcode will instead build the fat universal binary http://useyourloaf.com/blog/2010/04/21/xcode-build-active-architecture-only.html

Grass answered 5/3, 2015 at 12:9 Comment(0)
G
6

This might be related to libz.dylib or libz.tbd, just have to add it to your targets for the linking binaries, and try to compile again.

Gush answered 15/8, 2016 at 18:26 Comment(0)
A
6

You need to just remove arm64 from Valid Architecture and set NO to Active Architecture Only . Now just Clean, Build and Run. You will not see this error again.

:) KP

Anastomose answered 12/4, 2017 at 13:28 Comment(0)
M
5

Solved after deleting the content of the DerivedData-->Build-->Products-->Debug-iphoneos

Margaretamargarete answered 9/11, 2015 at 12:26 Comment(0)
A
5

Following worked for me:

  1. Remove all pods cd ios && pod deintegrate
  2. Comment this line in ios/Podfile -> use_flipper!()
  3. Reinstall all pods arch -x86_64 pod install
  4. Run your app :) npm run ios

Environment:
Node version: 14.17.1
RN version: 6.0.0
OS: macOS BigSur m1

Annabell answered 23/8, 2021 at 1:14 Comment(0)
T
4

I solved it by setting valid archs to armv7 armv7s and setting build active architectures only to YES in release and then doing a new "pod install" from the command line

Tricolor answered 17/1, 2014 at 17:42 Comment(0)
B
3

Given an iPhone 5s and not yet having received a 64 bit version of a third party library, I had to go back to 32 bit mode with the latest Xcode (prior to 5.1 it didn't complain).

I fixed this by deleting arm64 from the Valid Architectures list and then setting Build Active Architecture Only to NO. It seems to me this makes more sense than the other way around as shown above. I'm posting in case other people couldn't get any of the above solutions to work for them.

Bilharziasis answered 16/3, 2014 at 21:54 Comment(0)
J
3

I had the same problem after upgrading to Xcode 5.1 and fixed it by setting Architectures to armv7 armv7s

Johnsiejohnson answered 17/3, 2014 at 12:0 Comment(0)
T
3

Had been stuck on this issue the whole day.

I had multiple Schemes, it was compiling fine for Demo, Internal, Release - however Debug scheme just would not compile and was complaining about the libPods.a missing.

The solution was to go to the Project -> Target -> Build Settings and change "Build Active Architecture Only" to YES. Clean and build! Finally hours of head itching solved!

Tetratomic answered 19/2, 2015 at 16:39 Comment(0)
Z
2

Setting -ObjC to Other Linker Flags in Build Settings of the target solved the problem.

Zacharia answered 3/6, 2015 at 14:28 Comment(0)
S
2

As morisunshine answer pointed in right direction, a little tweak in his answer solved my problem for iOS8.2 .Thanks to him.

I solved this problem by setting that:

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO
Silda answered 7/7, 2015 at 8:44 Comment(0)
C
2
  1. Go to target Build Settings.
  2. set BUILD ACTIVE ARCHITECTURE ONLY = NO for both Debug and Release
  3. Build and run
Cyclonite answered 13/8, 2015 at 22:47 Comment(1)
set BUILD ACTIVE ARCHITECTURE ONLY to NO in PODS project also!Joaquin
F
2

This worked for me:

ios sdk 9.3

into your build setting of app.xcodeproj valid architecture: armv7 armv7s Build Active architecture : No

Clean and build , worked for me.

Fatuitous answered 1/4, 2016 at 12:41 Comment(0)
E
2

I faced the same issue. My solution I found here: Why linker link static libraries with errors? iOS

Adding $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) to the library search paths fixed the problem.

Erdda answered 13/6, 2019 at 15:25 Comment(0)
M
2

If you faced this issue on your Flutter project while building in Release mode (or Archive) check out my this answer: https://mcmap.net/q/35638/-undefined-symbols-for-architecture-armv7 Long story short:

  • set your build system to New Build System in File > Project Settings…
  • remove ios and build_ios folders
  • run flutter create . to init new ios module
  • run pod install
  • run flutter pub get
  • check your Xcode build config (it should be Release mode and General iOS Device)

and you're good to go

Meredith answered 26/4, 2020 at 19:39 Comment(0)
T
1

The following worked for me to get GPUImage compiling without errors on Xcode 5.1 for both the 64-bit simulator and retina iPad Mini, without needing to remove arm64 from the Valid Architectures list (which defeats the purpose of owning a 64-bit device for testing 64-bit performance).

Download the .zip folder from the GitHub page: https://github.com/BradLarson/GPUImage

Unzip, and navigate to the 'framework' folder. From here, add and copy the 'Source' folder into your Xcode project. Ensure 'Copy items into destination group's folder' is ticked, and that 'Create groups for any added folders' is also ticked. This will copy the generic, iOS and Mac header/implementation files into your project.

If you don't need the Mac files because you're compiling for iOS you can delete the Mac folder either before you copy the files into your project, or simply delete the group from within Xcode.

Once you've added the Source folder to your project just use the following to begin using GPUImage's classes/methods:

#import "Source/GPUImage.h" 

A few things to point out:

  • If you get an error saying 'Cocoa' not found, you've added the Mac folder/headers into your iOS project - simply delete the Mac group/files from your project and the warning will vanish
  • If you rename the Source folder (not the group in Xcode), use that name instead of "Source/GPUImage.h" in the #import instruction. So if you rename the folder to GPUImageFiles before you add to your project, use: #import "GPUImageFiles/GPUImage.h
  • Obviously ensure arm64 is selected in the Valid Architectures list to take advantage of the A7 64-bit processor!
  • This isn't a GPUImage.framework bundle (such as if you downloaded the framework from http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage) so it may not the correct way to use GPUImage that Brad Larson intended, but it works for my current SpriteKit project.
  • There's no need to link to frameworks/libraries etc - just import the header and implementation source folder as described above

Hope the above helps - it seems there were no clear instructions anywhere despite the question being asked multiple times, but fear not, GPUImage definitely works for arm64 architecture!

Tann answered 23/3, 2014 at 10:39 Comment(0)
G
1

This issue occurred for me after installing a pod via Podfile and pod install. After trying a bunch of different fixes I finally just imported the Pod manually (dragging the necessary files into my project) and that solved the problem.

Glen answered 28/2, 2015 at 17:22 Comment(0)
G
1

In my case, I had to look for

C++ Standard Library and make sure that the libc++ was the one selected.

Ginter answered 9/10, 2015 at 0:48 Comment(0)
S
1

For me, I use opencv 2.4.9 in xcode 7.2 for iOS and the errors above occurred, and I solve the errors by using the opencv through pod install rather than offline opencv framework.

You can have a try by adding the opencv pod text below and delete the offline opencv framework if you have used.

pod 'OpenCV', '2.4.9'

Semirigid answered 4/7, 2016 at 12:18 Comment(0)
B
1

None of the solutions fix this error in my case(Xcode 9), with TesseractOCRiOS. After hours of trial and error, I came up with a good solution. I just delete 'pod 'TesseractOCRiOS', '~> 4.0.0' in the Podfile, run pod install. And then, add pod 'TesseractOCRiOS', '~> 4.0.0' back to Podfile and run pod install again.

Bang! It works!

Bali answered 28/10, 2017 at 4:2 Comment(0)
J
1

"The OPN [Debug] target overrides the OTHER_LDFLAGS build setting". This was the main issue. After adding $(inherited) in new line in other linker flags solved my issue. enter image description here

Joanajoane answered 16/1, 2018 at 9:12 Comment(0)
K
1

in some case, if you define one more interface in a .h file, but did not implementation all these interface, this error occurred.

The linker can't found the implementation in .m file, so you need to implementation it in your .m file for every interface.

To resolve this error:

1.in .m file, supply the implementation for each interface. 2.rebuild

Kaceykachina answered 17/7, 2018 at 8:31 Comment(0)
C
1

If you use a .framework/.a writed by c++, where you invoke the c++ code, whice file need change to .mm file.

I losed half a day in that...

Crompton answered 12/6, 2019 at 6:52 Comment(0)
R
1

This linker error message suggests that the source file defining it is not marked as being part of your app target. Find that source file, and use the File property inspector on the right to check the target membership entry for your app target.

Solution: Select the file -> openFile Inspector -> see Target Membership -> check if unchecked target your running target

Recor answered 9/1, 2020 at 12:6 Comment(0)
I
1

This error consumed my whole day so thought of writing what really worked for me

  1. delete .xworkspace
  2. delete podfile.lock
  3. delete the Pods folder/directory

"DO NOT DELETE PODFILE"

After all this, CLEAN(OPTION + SHIFT + CMD + K) --> BUILD(CMD + B) --> RUN(CMD + R)

I hope this really works for you :)

Impish answered 15/2, 2021 at 12:18 Comment(0)
S
0

I have facing the same problem after installing the AWS framework to overcome this issue,I have update the POD config file from your project which get created after installing AWS POD. Check config file as below

OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l"
Pods-   AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l
"Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" 
-l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" 
-l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l"
Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" 
-l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" 
-l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l
"z"-framework "Accelerate" -framework "AssetsLibrary" 
-framework "CoreLocation" -framework "Foundation" -framework
"ImageIO" -framework "Security" -framework "SystemConfiguration"
-framework "UIKit" -weak_framework "UIKit"
 OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)   

if your config file not working properly then Set your Other Linker flag to $(inherited)

Suber answered 7/7, 2015 at 4:52 Comment(0)
H
0

If the architecture and linker settings look good, check your h files. My issue was the same error, but I had restructured the h files and I removed an extern statement. Other m files were using that variable, causing the linker error.

Hargeisa answered 28/11, 2015 at 18:38 Comment(0)
C
0

Adding "Security.framework" did the trick for me.

Chammy answered 13/5, 2016 at 14:49 Comment(0)
H
0

I know this is an old branch. However, the same problem started happening to me after migrating to the latest CocoaPods version (1.0.0) and trying to reinstall all pods. I encountered the "Missing symbols for armv64" linker error. Oddly enough, I solved it by performing the following steps:

  1. Remove all pods (pod init, pod install)

  2. Rewrite the podfile in a reversed order (instead of: pod "Mixpanel", pod "Intercom", I used: pod "Intercom", pod "Mixpanel" )

  3. Pod install

Reversing the order of the dependencies in the podfile and rebuilding the pods has solved the problem.

Hoehne answered 22/5, 2016 at 10:3 Comment(0)
C
0

My problem was that I already had some Facebook SDKs in my project (FBSDKLoginKit and FBSDKCoreKit).

I only needed one more SDK (FBSDKShareKit) and imported it, which thus gave "Undefined symbols architecture for arm64".

As the FBSDKShareKit is dependent on an updated version of FBSDKCoreKit, by updating the other frameworks, everything worked again.

Contrayerva answered 22/11, 2018 at 10:40 Comment(0)
A
0

I had this issue with my 'umbrella framework' which when I was building the second level framework.

I solved this by changing my first level framwork's Build Scheme for 'Generic iOS Device'. I think this will change _CodeSignature, which I saw the difference when I pushing my whole 'umbrella framework' to GitHub.

Acidforming answered 28/1, 2019 at 7:59 Comment(0)
S
0

Put the library in the same folder of project, that works for me

Swath answered 23/11, 2019 at 17:23 Comment(0)
E
0

In my case using dlib in IOS, I need to delete "inherited" from build settings/preprocessor macros.

Eri answered 28/11, 2019 at 14:35 Comment(0)
E
0

detail Hope can help you. I add framework and the problem has been resolved

Epoxy answered 2/2, 2020 at 2:36 Comment(0)
P
0

Replacing -ObjC with $(inherited) in Other Linker Flags fixed my problem

Print answered 3/9, 2020 at 14:7 Comment(1)
try adding in projectPrint
C
0

I was facing this issue in Xcode v14.1.1

issue is fixed in > v14.1.1

Cunha answered 10/10, 2023 at 6:2 Comment(0)
S
-1

This solution is the only thing that worked for me: go to CordovaLib settings and add arm64 to Valid Architectures.

Sang answered 25/5, 2015 at 15:1 Comment(0)
P
-1

invoke pod update then remove pod 'ARCore' from your pod file, and invoke pod install again. then add pod 'ARCore' to pod file and invoke pod install again

Paramount answered 23/5, 2021 at 14:51 Comment(0)
L
-1

If you are using m1 (arm64) and you have problem you can run it in x86 mode:

  • Right click on xcode and tap on Get Info button
  • Tick the Open using Rosetta option

It will be slow but working.

Lashaunda answered 25/5, 2021 at 9:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.