【发布时间】:2012-09-24 11:12:58
【问题描述】:
我有一个 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++ 编译器编译的动态库链接,而不是与使用 @ 编译的动态库链接987654334@。当然,我知道我可以简单地在makefile 中使用多个条件语句来为每个使用的工具链设置带有库二进制文件的确切目录,但这有点不方便。我在徘徊,链接器是否足够聪明,可以识别它应该使用哪个确切的共享库文件,或者它只是使用在系统LIBRARY_PATH 中找到的第一个匹配项?
【问题讨论】:
标签: c++ linker dynamic-linking