我有一個C++項目,當前沒有鏈接任何外部動態庫。我正在考慮在將來需要構建一些boost庫(而不是僅標頭)。目前,在開發階段,我使用三種不同的工具鏈構建我的項目:g++
,LLVM/Clang++
和Intel C++
,平臺爲Linux
。這些編譯器AFAIK彼此是二進制兼容的,例如, g ++編譯的應用程序可以使用英特爾C++編譯的動態庫。鏈接器如何選擇使用不同編譯器編譯的動態庫
我已經構建了boost二進制文件並將它們安裝到不同的文件夾中。例如build_gcc
,build_icc
。然後我將這些文件夾的路徑添加到系統LIBRARY_PATH
。問題是:如果我現在使用g++
或Intel C++
構建項目並鏈接一些動態庫(例如,寫
-lboost_math_tr1
在
makefile
,如何鏈接器決定哪些確切的庫文件來鏈接,如果從不同的編譯器的二進制文件相互兼容?
問題的動機很簡單:Intel C++
是一個優化的編譯器,所以如果我建立的東西吧,我希望他們對與Intel C++
編譯器編譯動態庫鏈接,而不是對一個與g++
編譯。當然,我知道我可以在makefile
中簡單地使用多個條件語句來爲每個使用的工具鏈設置庫二進制文件的確切目錄,但這只是有點不方便。我在遊蕩,鏈接器是否足夠聰明,可以識別它應該使用的確切的共享庫文件,還是僅僅使用系統中的第一個匹配項LIBRARY_PATH
?
簡單而完整的解釋。謝謝。 – Dmitry