我在OS X上使用Xcode使用Boost庫。我的系統上使用macports安裝了Boost。我已經成功地構建了我的應用程序,通過將我需要的3個增強庫(例如,libboost_thread-mt.a)添加到該目標的「鏈接二進制庫」列表中。不過,我需要靜態鏈接這些庫,以便應用程序可以在其他計算機上運行,而無需安裝增強庫。在Xcode 4上增強庫靜態鏈接
我該怎麼做到這一點?通過我的衆多谷歌搜索,我發現我可能需要添加'-static' - 我在哪裏添加這個Xcode?
我在OS X上使用Xcode使用Boost庫。我的系統上使用macports安裝了Boost。我已經成功地構建了我的應用程序,通過將我需要的3個增強庫(例如,libboost_thread-mt.a)添加到該目標的「鏈接二進制庫」列表中。不過,我需要靜態鏈接這些庫,以便應用程序可以在其他計算機上運行,而無需安裝增強庫。在Xcode 4上增強庫靜態鏈接
我該怎麼做到這一點?通過我的衆多谷歌搜索,我發現我可能需要添加'-static' - 我在哪裏添加這個Xcode?
如果您已鏈接到.a
庫,那麼您已經靜態鏈接。你永遠不需要運送.a
庫。他們只是一堆物品。
編輯:你的錯誤強烈建議您要鏈接的dylib而非.A。如果您的庫路徑中有libfoo.dylib
和libfoo.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。
這就是我所想的,但是當試圖在另一臺計算機上運行應用程序時,該應用程序將無法運行,並且出現錯誤,指出無法找到相關的.dylib文件。應該將.a文件鏈接到除「Link Binary With Libraries」部分之外的其他位置的項目? – 2012-03-06 15:55:12
「使用構建窗格,您還可以將整個路徑傳遞到」其他鏈接器標誌「中的庫。 - 這解決了問題。謝謝! – 2012-03-06 17:28:20