我有一个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