Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Arm64 architecture in xcode 5.1

In the new XCode 5.1, arm64 has become among the standard architectures to build for.

However, in current projects of mine I included libraries (Google AdMob for example) that do not yet support this new architecture - these are now causing linker errors:

ld: symbol(s) not found for architecture arm64 

Google AdMob 6.8.0 for example is said to be supporting arm64 but I can't really confirm this, unless cputype (16777228) cpusubtype (0) is arm64? (found through the file command-line tool)

libGoogleAdMobAds.a: Mach-O universal binary with 5 architectures libGoogleAdMobAds.a (for architecture armv7):   current ar archive random library libGoogleAdMobAds.a (for architecture armv7s):  current ar archive random library libGoogleAdMobAds.a (for architecture i386):    current ar archive random library libGoogleAdMobAds.a (for architecture x86_64):  current ar archive random library libGoogleAdMobAds.a (for architecture cputype (16777228) cpusubtype (0)):   current ar archive random library 

Is there a way to go about this?

like image 279
MrJre Avatar asked Mar 11 '14 10:03

MrJre


People also ask

What is ARM64 architecture in iOS?

arm64 is the current 64-bit ARM CPU architecture, as used since the iPhone 5S and later (6, 6S, SE and 7), the iPad Air, Air 2 and Pro, with the A7 and later chips. armv7s (a.k.a. Swift, not to be confused with the language of the same name), being used in Apple's A6 and A6X chips on iPhone 5, iPhone 5C and iPad 4.

Is ARM64 the same as armv8?

That also indicates that armv8 and arm64 are the same thing.

Is ARM64 an architecture?

An ARM64 processor is an evolution of ARM architecture that includes servers, desktop PCs, and the internet of things (IoT). ARM64 processors help address the increased processing demands from new technologies such as high-resolution displays, realistic 3D gaming, and voice recognition.

What is valid architectures in Xcode?

VALID_ARCHS (Valid Architectures) Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on.


1 Answers

It's not that hard to get rid of arm64 for the time being. all you need to do is to:

  • Edit your target's Build Settings. Change the value for Architectures by opening the drop down, click on Other... and select it, delete the row with value $(ARCHS_STANDARD) and add two rows with values: armv7 and armv7s (or $(ARCHS_STANDARD_32_BIT) as mentioned by nschum), close the popup.

  • Edit the value Valid Architectures and simply remove the arm64 part of it.

  • Do it for every nested project you might have inside your workspace or project.

Note: This is not a solution, it's just a few steps to mitigate your current problem, please keep following your dependency projects to find out when they come with arm64 compatibility and revert these settings' change ASAP.

Good luck

like image 149
4 revs Avatar answered Oct 15 '22 08:10

4 revs