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?
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.
That also indicates that armv8 and arm64 are the same thing.
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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With