Error: “File was built for archive which is not the architecture being linked (armv7s)”

时光毁灭记忆、已成空白 提交于 2019-12-18 10:13:37

问题


I have built my own Static C++ Library, which is built with the settings:

  • Architectures: armv7, armv7s
  • Build Active Architectures Only: No
  • Support Platforms: iOS
  • Valid Architectures: armv7, armv7s

The library project builds well and I got the .a file (I have cleaned the build folder and built the project again to be sure my settings were effective).

I have added the library (.a file) to my iOS project, but the project won't build even though I have set the exact same settings on the iOS project:

  • Architectures: armv7s, armv7
  • Build Active Architectures Only: Yes
  • Support Platforms: iOS
  • Valid Architectures: armv7, armv7s

I keep getting this error:

ld: warning: ignoring file /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a, file was built for archive which is not the architecture being linked (armv7s): /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a

What am I missing? It tells me the .a file was not built for armv7s, but that is exactly the settings I built the library with.


回答1:


When you're building a library you must compile it both for the simulator and the device and then merge the two outputs (.a files) into 1 library and then link it to your iOS project.




回答2:


I ran into a similar problem myself. @graver's solution is definitely valid.

The issue was that the library was being built for armv7 instead of armv7s. You can verify this yourself by using lipo <path/to/lib.a> -info.

Setting the Build Active Architectures Only option to No fixes the issue.

Hope this helps.




回答3:


one additional notes is:

    Build Active Architectures Only  set to no

is for the lib project.




回答4:


I have got the exact same error when with cocapods : For me the solution was to have two differents Build Active Architecture for target and pods.

App Target :

Build Active Architectures Only  **Yes**

pods Target

Build Active Architectures Only  **No**



回答5:


unfortunately all these pieces of advice don't work for me - Xcode 7.3.1 (7D1014), iPhone 5. but as soon as I removed all Xcode temporary files (+ restart Xcode) and rebuild again it became working.




回答6:


It did happen to me with Facebook SDK (v 4.24.0) used via CocoaPods.

Cleanning or setting Build Active Architectures Only to NO on Pods didn't resolve the problem.

The solution was to empty the build directory (see Build settings/Build locations/CONFIGURATION_BUILD_DIR) OR $(CONFIGURATION_BUILD_DIR) Xcode variable.




回答7:


I use XCode 5.1.1 and ran into the described problem. A more convenient way to solve this problem seems to be just to create an Archive (via menu Build/Archive) and distribute it. The distributed lib file will contain all defined architectures.



来源:https://stackoverflow.com/questions/14828693/error-file-was-built-for-archive-which-is-not-the-architecture-being-linked-a

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!