在 Xcode 內加入 static library

如果要用別人包好的套件,有可能會收到以 static library 形式釋出的檔案,其中裡面通常包含:

  • libXXX.h
  • Debug-iphoneos/libXXX.a
  • Debug-iphonesimulator/libXXX.a
  • Release-iphoneos/libXXX.a
  • Release-iphonesimulator/libXXX.a

如果直接整包加入專案,通常會編譯失敗,並出現錯誤訊息:


ld: warning: ignoring file Debug-iphoneos/libXXX.a, file was built for archive which is not the architecture being linked (i386): Debug-iphoneos/libXXX.a
Undefined symbols for architecture i386:
"_OBJC_CLASS_$_XXX", referenced from:
objc-class-ref in XXXXX.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

這是由於 iOS 的模擬器實際上還是跑在桌機筆電的 CPU 架構下,而不是手機上的 CPU 架構,因此編譯器找不到正確的 .a 檔來用。

解決方式:

  1. 將所有檔案加入 Xcode
  2. 點開專案,選擇目的TARGETS,點開Build Settings分頁,搜尋Library Search Paths,點開左邊的箭頭,預設只會有「Debug」及「Release」
  3. 點「Debug」右邊的「+」新增細節項目,選擇「Any Architecture」及「Any Simulator」,結果會顯示「Any iOS Simulator SDK」
  4. 再新增一個細節項目,選擇「Any Architecture」及「Any iOS」,結果顯示「Any iOS SDK」
  5. 「Release」如法泡製
  6. 在「TARGET」那欄點滑鼠兩下,開啟列表,放入相對應的「.a」檔案所在的目錄(Debug/Release 及 iphoneos/iphonesimulator)
  7. 檢查原本 Debug/Release 裡面,相關的東西全部刪除

Screen Shot 2014-04-25 at 2.35.22 PM

如果有再根據不同 CPU 架構,需要自行調整。完成後應該就可以順利通過編譯了!


參考:http://iphoneincubator.com/blog/xcode/how-to-add-multiple-static-library-files-with-different-architectures-to-xcode

Leave a Reply

Your email address will not be published. Required fields are marked *