2012-03-06 60 views
5

我在OS X上使用Xcode使用Boost庫。我的系統上使用macports安裝了Boost。我已經成功地構建了我的應用程序,通過將我需要的3個增強庫(例如,libboost_thread-mt.a)添加到該目標的「鏈接二進制庫」列表中。不過,我需要靜態鏈接這些庫,以便應用程序可以在其他計算機上運行,​​而無需安裝增強庫。在Xcode 4上增強庫靜態鏈接

我該怎麼做到這一點?通過我的衆多谷歌搜索,我發現我可能需要添加'-static' - 我在哪裏添加這個Xcode?

回答

7

如果您已鏈接到.a庫,那麼您已經靜態鏈接。你永遠不需要運送.a庫。他們只是一堆物品。


編輯:你的錯誤強烈建議您要鏈接的dylib而非.A。如果您的庫路徑中有libfoo.dyliblibfoo.a,即使您在Xcode中說「鏈接libfoo.a」,並且即使libfoo.a在搜索路徑中較早,它仍會鏈接libfoo.dylib。這是因爲Xcode的鏈接完全被破壞,並且將-lfoo傳遞給鏈接器(您不應該使用-l來構建您已構建的內容並且具有確切的路徑)。我總是建議將您在LDFLAGS中構建的庫鏈接到xcconfig文件中,而不是使用構建窗格。你通過你想要的確切路徑,而不是使用-l。有關xcconfig的更多信息,請參閱Abandoning the Build Panel。它現在已經過時了,因爲它是爲Xcode3編寫的,但基礎仍然適用。

使用構建窗格,還可以將整個路徑傳遞到「其他鏈接器標誌」中的庫。但是這仍然存在構建窗格的所有問題。

更快(但不太穩健)的解決方案有時會將-Wl,-search_paths_first添加到「其他鏈接器標誌」。這改變了行爲,以便在繼續之前(缺省行爲是搜索.dylib的每個地方,然後僅搜索.a),搜索.dylib.a的每個庫路徑。因此,如果您的.a與您的.dylib位於不同的目錄中,並且該目錄位於搜索路徑的較早位置,則這將起作用。

這個問題終於讓我打開一個radar對此,我應該在幾年前做。我建議其他人打開duplicates

+0

這就是我所想的,但是當試圖在另一臺計算機上運行應用程序時,該應用程序將無法運行,並且出現錯誤,指出無法找到相關的.dylib文件。應該將.a文件鏈接到除「Link Binary With Libraries」部分之外的其他位置的項目? – 2012-03-06 15:55:12

+0

「使用構建窗格,您還可以將整個路徑傳遞到」其他鏈接器標誌「中的庫。 - 這解決了問題。謝謝! – 2012-03-06 17:28:20