這種事沒記下來立即就忘了, 我是用 XCode 4.6。
新增子專案
- 在 Project Navigator 點專案 A
- 點左下角的 '+', 選擇加新專案, 選擇使用 static shared library, 完成剩下的步驟
- 點專案 A: Build Phases -> Target Dependencies -> 加入專案 B 的 static shared library
- 點專案 A: Build Phases -> Link Binary with Libraries: 加入專案 B。若專案 A 之上有專案 M, 這步要加在專案 M
雜七雜八問題
- 找不到 header: 在 Build Settings 搜尋 header 會找到 Header Search Paths 和 User Header Search Paths, 記得填入正確的值。可以對一下編譯的原始訊息了解設下去轉換成什麼東西。這裡的路徑是相對於專案位置的。
- 連結失敗, 找不到 static shared library 內的 symbol: 確定 Link Binary with Libraries 裡面有加到這個 library, 還有有在正確的 project 內設 Link Binary with Libraries。
- 連結失敗, static shared library 內有 undefined symbol: 注意在 Link Binary with Libraries 裡和其它 libraries 的順序。同樣地, 對一下編譯的原始訊息會比較清楚情況。
- static shared library 一直是紅字: google 一下有人說疑是 XCode bug, 在實體裝置上編譯過後, 就沒有紅字了。我試的結果確實如此。
- 找不到 C++ STL 的 symbol: 錯誤訊息像這樣:
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__init(char const*, unsigned long)", referenced from:
檢查 Build Settings -> C++ Standard Library, 這裡有三個選項:- libstd++ (GNU C++ standard library)
- libc++ (LLVM C++ standard library)
- Compilation default (be consistent)
結論是先有基本觀念, 出錯時比較知道怎麼找原因。雖然一樣是 google 關鍵字, 至少讀搜尋結果時, 知道應該優先讀那些文章, 效率會好很多。再來是盡量在 Build Settings 和 Build Phases 裡找和編譯以及連結相關的參數。
2015-06-09 更新
XCode 6 新增專案的方式變了,改成在 Project Navigator 點專案 A 然後按右鍵選 "New Project"。然後選 "Framework & Library" -> "Cocoa Touch Static Library"。
沒有留言:
張貼留言