我有一个 C++ 项目,目前没有链接到任何外部动态库。我正在考虑将来使用一些需要构建的boost库(不是仅标题)。目前,在开发阶段,我使用三个不同的工具链构建我的项目:和g++
,平台是. 这些编译器,AFAIK,彼此二进制兼容,例如 g++ 编译的应用程序可以使用英特尔 C++ 编译的动态库。LLVM/Clang++
Intel C++
Linux
我已经构建了 boost 二进制文件并将它们安装到不同的文件夹中。例如build_gcc
,build_icc
。然后我将这些文件夹的路径添加到系统中LIBRARY_PATH
。问题是:如果我现在使用g++
or构建我的项目Intel C++
并链接一些动态库,例如写
-lboost_math_tr1
在 中makefile
,如果来自不同编译器的二进制文件相互兼容,链接器如何决定链接哪个确切的库文件?
这个问题的动机很简单:Intel C++
是一个优化编译器,所以如果我用它构建东西,我希望它们与用Intel C++
编译器编译的动态库链接,而不是与用g++
. 当然,我知道我可以简单地使用多个条件语句makefile
来为每个使用的工具链设置带有库二进制文件的确切目录,但这有点不方便。我在徘徊,链接器是否足够聪明,可以识别它应该使用哪个确切的共享库文件,或者它只是使用系统中第一个出现的位置LIBRARY_PATH
?