Xcode添加靜態庫以及編譯選項配置常見問題



一,Xcode編譯出現Link錯誤,出現"duplicate symbols for architecture i386 clang"提示.
問題:鏈接時,項目有重名文件.
解決:
根據錯誤提示,做如下檢查:
1.Taraget->Build Settings->Link Binary With Libraries檢查是否有重復lib.
2.全工程搜索下重名文件,決定如何刪除.

二,關於Category位於靜態庫時,引用該靜態庫的工程使用Category,出現"unrecognized selector sent to class"提示.
問題:標准UNIX靜態庫與Objective-C之間Linker的差異.在標准的UNIX靜態庫內,linker symbol是依照每一個類別而產生的,但由於Category並沒有真正產生一個類別,所以出錯.
解決:
1.在該靜態庫的Taraget->Build Settings->Other Linker Flags->加上 -ObjC.
2.在使用該靜態庫的工程Taraget->Build Settings->Other Linker Flags->加上-all_load或-force_load.

三,編譯warning:ld: warning: directory not found for option '-L'.
問題:通常是Path問題.
解決:
Taraget->Build Settings->Library Search Paths 和 Framework Search Paths,刪掉編譯報warning的路徑即OK

四,引入(帶源碼的)靜態庫所需配置.
步驟:
1.Add Files to.. 加入靜態庫的.xcodeproj 文件,不要勾選Copy Items.. 選項。(可以先把源代碼項目先復制到使用項目文件夾下)
2.Target->Build Phases->Target Dependecies->加靜態庫 && Link Binary With Libraries->加靜態庫.
3.配置靜態庫頭文件路徑,在Taraget->Build Settings->User Header Search Paths->配上靜態庫的物理路徑.

[錯誤tips: 若出現加入的.xcodeproj無法展開,則在Xcode中關閉靜態庫項目即可]

PS:只有.a 和 .h的靜態庫,則直接拖入項目即可。

五,關於重構,解決跨層調用問題,
常用選擇:
1.傳參(包括靜態變量的使用)
2.傳回調
3.直接移動調用的代碼(若代碼出現在不適合的地方,移動類/方法/etc)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM