2013年2月2日 星期六

XCode 編譯連結 static library 的注意事項

最近遇到兩個狀況

  • link 執行檔時, 找不到 static library 內用的 symbol
  • link 執行檔時, 找不到 Core Data 用的 schema (*.momd)

重新回憶《解決 undefined symbol / reference》, 想到 Mac OS/iOS 也是和 Linux 類似的架構, 原理應該一樣。上網搜了相關文章, 得到以下的解法:

  • static library 只能含有 object file, target 為 static library 的時候, 設定 Build Phases 裡的 Link Binary With Libraries 沒有意義。應該要設 application target 的 Link Binary With Libraries, 因為是建立 application (unit test, etc) 時才會 link libraries
  • 同上, static library 不能含有其它 resource file, 要放在其它 target 的 bundle 裡, 然後 static library 裡的程式讀另外的 bundle。

參考資料:

1 則留言:

  1. 如果一個 static library project A 要做 logic unit test,但 A 會用到另一個 static library project B 裡面的功能,那麼 static library Build Phases 的 Link Binary With Libraries 是否要把 B 引入呢

    回覆刪除

在 Fedora 下裝 id-utils

Fedora 似乎因為執行檔撞名,而沒有提供 id-utils 的套件 ,但這是使用 gj 的必要套件,只好自己編。從官網抓好 tarball ,解開來編譯 (./configure && make)就是了。 但編譯後會遇到錯誤: ./stdio.h:10...