一、file was built for archive which is not the architecture being linked (armv7s)
項目是基於cocos2d-x綁定lua進行開發的,需要引用liblua.a靜態庫,編譯的時候報上面的錯。需要將liblua項目中的build Settings配置項中的“Build Active Architecture Only”改為YES (是否只編譯當前適用的指令集)
關於這個屬性,直接從網上轉載過來(關於Build Active Architecture Only屬性)
這個屬性設置為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的設備就不能運行。
目前IOS的指令集
armv6 iPhone、iPhone2、iPhone3G、第一代和第二代iPod Touch
armv7 iPhone4、iPhone4S
armv7s iPhone5、iPhone5C
arm64 iPhone5S
二、宏定義
c++代碼中很多地方是通過宏控制的,所有對於宏的檢查要很仔細。Debug、Release二個版本的宏定義是不一樣的,要注意有所區別。所以這里定義出了問題,那自然build測試時跟預期的不一樣,而且很難定位問題
三、Search Path
這里很容易出錯,比如接入第三方SDK時需要引入相應的.framework文件。這里的路徑最好使用相對路徑(比如使用${SRCROOT}),以避免切換另外一台mac時用戶名不一致導致無法編譯,需要重新修改路徑的問題。
頭文件,這里記得補全,不然編譯時就會報找不到頭文件…
最后一個Library Search Paths比較坑,被這個坑了比較長時間。我使用workspace跟直接打開xcodeproject生成的靜態鏈接庫路徑不一樣,然后切換的時候,在這里並未刪除相應的路徑,導致一直優先從舊的.a庫中查看,結果可想而知。無論我怎么去清理、重新編譯,都無法看到改動后的效果
…/xx.a
../xx/xx.a
它會優先找上面的xx.a,然后再找xx下的xx.a。如果在xx.a中找到對應的方法,就不再往下查找了,所以這里就有坑了…
一般這里會按照這樣的格式輸入路徑“$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)”
$(SRCROOT)宏代表您的工程文件目錄,$(EFFECTIVE_PLATFORM_NAME)宏代表當前配置是OS還是simulator
四、LLVM的編譯參數
一般都采用默認的,有一些特殊的SDK,則需要修改相應的選項。
還有一個就是Other Linker Flags的參數設置,根據需要進行設置(點擊查看Other Linker Flags詳解>>)
五、向工程中添加文件時的選擇
Create groups for any added folders 與 Create folder references for any added folders
上面這張圖已經描述比較清楚了,如果想了解更詳細的,可以參數這里:Cocos2d-x Create groups for any added folders 與 Create folder references for any added folders
Copy items into destination group’s folder一般在debug時是不會選中的,多數情況下我們使用"references”較為,創建組的方式,添加的文件(如cpp)會被編譯。
暫時就想到這幾個坑了,還有很多坑,有空再一並整理出來。新手上路,總歸遇到的問題會比較多