靜態庫錯誤

2021-06-21 00:51:34 字數 643 閱讀 4543

許多第三方提供的.a檔案(一般是那些sdk),嵌入到我們的xcode專案後,生成不會報錯。

一部分粗心的sdk提供方,或者我們自己做的.a檔案,就會有報錯,常見的就是不是armv7結構,或者不是armv7s結構,如果在模擬器中執行,會報不是i386結構。

原因是:armv7是支援比iphone5舊的那些裝置,armv7s是iphone5或ipad4或者以後的新裝置,i386是mac的。

這些名字指的是處理器所用的指令集。

因此常常發生的是.a檔案要麼ipad mini可以build成功,但iphone5不能build成功。要麼就相反,讓人抓狂。

解決辦法是做乙個全面支援各指令集的.a檔案。

前提是分別生成3個支援對應指令集的.a檔案。在build靜態庫時,裝置分別選擇不同的真機以及模擬器,分別build出來,備份到乙個資料夾,並且取不同的名字。

此時可以用命令來檢查匯出的.a檔案所支援的指令集,lipo -info ***.a ,要保證3個都是不同的才能進行下一步 ,注意:armv7s的顯示名是cputype (12) cpusubtype (11)

然後以命令 lipo -create ***x_v7.a ***x_v7s.a -output ***x_all.a 合成他們成為新的.a檔案。

最後替換掉報錯的.a檔案即可。

靜態錯誤與動態錯誤

程式設計師編寫的源程式中往往會有一些錯誤,這些錯誤大致被分為靜態錯誤和動態錯誤兩類。所謂動態錯誤,是指源程式中的邏輯錯誤,它們發生在程式執行時,如演算法邏輯上的錯誤。動態錯誤也被稱為動態語義錯誤,如變數取值為0是被用作除數,引用陣列元素時下標出界等。靜態錯誤又可以分為語法錯誤和靜態語義錯誤。詞法和語...

打包靜態庫,合併靜態庫

ios靜態庫 a 和framework 合併靜態庫 1,開啟終端,輸入lipo create release iphoneos libsbjson.a release iphonesimulator libsbjson.a output combine libsbjson.a 其中release i...

vs2010靜態鏈結MFC庫報鏈結錯誤

由於需要將mfc程式在其它電腦上執行,所以需要將動態鏈結的mfc改成靜態鏈結,本以為很簡單,沒想到鏈結的時候出現下面的鏈結錯誤 uafxcw.lib afxmem.obj error lnk2005 void cdecl operator new unsigned int 2 yapaxi z al...