iphone - with - xcode valid architectures i386 x86_64
file was built for archive which is not the architecture being linked(i386) (6)
I got to build static library. I want to use in my iPhone and ipad app. When I try to run the simulator I get linking errrors. I am new to iOS development. kindly help;
ld: warning: ignoring file /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a, file was built for archive which is not the architecture being linked (i386) Undefined symbols for architecture i386:
"_OBJC_CLASS_$_netUtils", referenced from: objc-class-ref in ViewController.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)
I tried adding i386 in the Architectures. but no luck
After struggling with this same problem and following all the accepted answers of updating build settings, clearing the linker search path, etc.. I finally discovered an answer that worked for me.
Before building, make sure you select right type (iPhone Simulator) instead of iOS Device. Then rebuild. Otherwise, you're trying to use a library built for an iOS device (arm processor) on a simulator on your mac (i386). Should've been obvious, but wasn't.
Now, look in the Products group in the Navigator > right click your static library (.a file) > Show in Finder, you'll notice that its in a Debug-iphonesimulator folder instead of Debug-iphoneos. I didn't pay any attention to the folder name originally, or I might have thought of this sooner.
Hope this helps.
Had the same problem, and tried diverse solutions from the page to no avail. I still had a message telling me my library was not build for arm64.
Finally how I resolved it :
- opened the project.pbxproj for the library in a text editor
- searched for VALID_ARCHS
- there were 4 occurrences, 2 of which did not contain arm64
- I manually added arm64 in the chain (VALID_ARCHS = "arm64 i386 armv7 armv7s")
- rebuild the lib and it was all right
Seems sometimes the build settings displayed by XCode is incomplete, and doesn't correspond precisely to the project file.
I had an architecture of armv7s as well. I deleted it and made sure the armv6 and armv7 were the only two listed. It works now
If I get the ignore file warning - I would run
lipo -info on ignored file to find it's architecture as below
lipo -info libnetUtils.a
That would print either of i386, armv6, armv7, armv7s, x86_64 etc. In general, that architecture has to match with your target build platform. E.g.
- i386 = ios simulator or 32 bit build on mac os x
- armv6 armv7 arm7s = ios device
- x86_64 = 64 bit build on mac os x
Depending on the mismatch, either you have to rebuild your library for your target platform or change your target platform.
Note: For fat binaries,
lipo -info will print a combination of above architectures.
Sometimes these types of errors irritates you!
Removing Derived Data Works for me:
Steps to fix
1) In XCODE > Windows > Project > Select your project > Delete derived Data > Quit XCODE and Reopen it > If you get MAC-O-Linker builed failed error > Refere this link > Clean and Build again.
This issue will not occur when we run the application on device. You can check it by running the code on iOS device.