xcode編譯時,有第三方庫時,編譯設定build active architecture only問題
1、http://blog.csdn.net/dengdengxiximeimei/article/details/8845621
這個屬性設定為yes,是為了debug的時候編譯速度更快,它只編譯當前的architecture版本。
而設定為no時,會編譯所有的版本。
這個是裝置對應的architecture:
armv6:iPhone 2G/3G,iPod 1G/2G
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G
armv7s:iPhone5, iPod5
編譯出的版本是向下相容的,比如你設定此值為yes,用iphone4編譯出來的是armv7版本的,iphone5也可以執行,但是armv6的裝置就不能執行。
所以,一般debug的時候可以選擇設定為yes,release的時候要改為no,以適應不同裝置。
2、http://blog.sina.com.cn/s/blog_45e2b66c0101bgep.html
build active architecture only設定:
新增一個.a檔案到工程中,然後死活編譯不過去,提示錯誤資訊:
ld: warning: ignoring file /Users/test/Desktop/new31248/shell42/core/lib/Release-iphoneos/libPyConvertlib4Ipad.a, file was built for archive which is not the architecture being linked (armv7s): /Users/test/Desktop/new31248/shell42/core/lib/Release-iphoneos/libPyConvertlib4Ipad.a
Undefined symbols for architecture armv7s:
"*******(NSString*)", referenced from:
-[***** *****:] in *****.o
。。。。。。。
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
具體相關設定如下:
用lipo -info 檢視.a檔案
:input file ******.a is not a fat file
Non-fat file: ******.a is architecture: armv7
說明.a檔案只是一個armv7結構,而自己要編譯的是要支援armv7和armv7s的fat file,於是可以將architectures屬性(保羅release和debug)改為:armv7,這樣可以編譯過去。
也可以將Build Active Architecture Only 改為Yes,但是此種方法都是隻會支援armv7和向下相容,如果想要相容armv7s,就最好將.a檔案用armv7s 編譯,這樣就相容armv7了。
armv6、armv7、armv7s是arm CPU的指令集,一般是向下相容的。如iPhone4sCPU支援armv7,但它會相容armv6,只是使用armv6指令可能無法充分發揮它的特性。同理iPhone5是完全支援armv7的,所以不用擔心armv7的庫不能在iPhone5上跑,一般情況是不會出問題的。但需要提醒的是,蘋果是自Xcode4.5之後,就放棄了對armv6的支援,換言之,就是Xcode4.5正常情況是不能編譯armv6庫的(當然據說通過特殊手段可以支援,之前在網有看到一些在神的帖子,感興趣的可以搜搜)。還有一點提醒大家,就是可能Xcode4.5編譯的包沒有armv6,提交應用上傳時,會提示要支援armv6,當時此問題把我糾結了好一陣。後來我將支援的最低版本發為iOS4.3就OK。
另附加轉載:http://blog.csdn.net/yujie1985/article/details/8552650
armv6、armv7、armv7s是arm CPU的指令集,原則上是向下相容的,如:iPhone4sCPU支援armv7,但它會相容armv6,只是使用armv6指令可能無法充分發揮它的特性。iphone5CPU支援armv7s,它也會相容armv7。
如果引用到第三方的庫,以前在iphone4s下編譯沒有問題,但是換成iphone5之後,提示:
Undefined symbols for architecture armv7s:
"_OBJC_CLASS_$_AMapView", referenced from:
objc-class-ref in libMAMapKit.a(MAMapView.o)
ld: symbol(s) not found for architecture armv7s
原因是:你引用的靜態庫確實不支援armv7s,那麼你要想順利編譯通過,要麼通知開發修改,等待支援了之後再測;要麼在target的build settings中的valid Architectures 將armv7s先暫時去掉,編譯就可以成功。(等待支援了之後,再新增上)
相關文章
- 優化 Xcode 編譯時間優化XCode編譯
- CMake編譯Qt工程時的問題編譯QT
- iOS FFmpeg XCode編譯報錯問題 AVMediaTypeiOSXCode編譯
- 編譯Caffe時開啟cudnn常見問題編譯DNN
- Xcode編譯流程XCode編譯
- Laravel6.18.0 NPM 編譯時遇到的問題LaravelNPM編譯
- SPI編譯問題編譯
- perl 編譯問題!編譯
- jive編譯問題編譯
- 執行時框架,編譯時框架框架編譯
- 編譯時註解(轉)編譯
- nodejsless及時編譯NodeJS編譯
- [譯] 優化 Swift 的編譯時間優化Swift編譯
- 配置pycharm 編譯器時遇到的一些問題PyCharm編譯
- PG資料庫定時任務:PgAgent編譯安裝使用資料庫編譯
- GCC編譯遇到“a label can only be part of a statement and a declaration is not a statement”問題GC編譯
- java編譯、編碼、語言設定Java編譯
- libmemcached編譯問題IBM編譯
- EBS form編譯問題ORM編譯
- XCode 編譯 PAG 原始碼XCode編譯原始碼
- Go 編譯時加入版本資訊Go編譯
- 編譯時註解之APT編譯APT
- Android編譯時註解框架系列1-什麼是編譯時註解Android編譯框架
- 提前編譯:AOT-Native Image 和執行時編譯 JIT編譯
- 有關eclipse編譯更新的問題?急急!!Eclipse編譯
- Python Extension 編譯問題Python編譯
- 請教javac 編譯問題Java編譯
- cmake編譯問題解決編譯
- Myeclipse不能編譯問題Eclipse編譯
- 編譯libodb-mysql.lib時遇到的一個問題編譯MySql
- 使用 ccache 增加 Xcode 編譯速度XCode編譯
- 如何提高 Xcode 的編譯速度XCode編譯
- Xcode 4.2 編譯 ios5.1XCode編譯iOS
- 編譯JiveGlobals.java時出錯?編譯Java
- 儲存過程編譯時卡死儲存過程編譯
- Oracle EBS -- 編譯Form時出錯Oracle編譯ORM
- Qt 獲取程式編譯時間QT編譯
- golang windows10下 go build 無法編譯 問題解決GolangWindowsUI編譯