2015-02-06 81 views
1

我有一个系统范围libc++.so/usr/lib64。我想将我的二进制文件与位于其他地方的另一个libc++.so链接起来,比如$HOME/.local/lib。另外,我想能够像以前一样找到所有其他库,假设$HOME/.local/lib仅包含libc++.so如何更喜欢一个库位置与另一个位于Clang的位置?

我试图做这样的:clang++ -L$HOME/.local/lib -lc++,但编译器仍然链接到/usr/lib64/libc++.so


如何强制编译器(或链接器)链接到特定的库位置?

回答

1

-L将目录添加到链接器使用的搜索路径。这对运行时使用的搜索路径没有影响。在运行时,搜索路径,依次是:

  1. 环境变量中可执行文件规定LD_LIBRARY_PATH
  2. rpath
  3. 系统库路径

虽然你可以达到你想要什么指定环境变量LD_LIBRARY_PATH=$HOME/.local/lib,这是一个不好的解决方案,因为它修改了所有可执行文件的搜索路径。指定rpath是一个更清洁的解决方案,因为它只影响可执行文件的行为。您可以通过工具链的链接器选项来完成此操作,这可能是-rpath。所以命令将是clang++ -rpath $HOME/.local/lib -lc++

+0

这不是我正在寻找的。我不想硬编码rpath或影响运行时行为。我想为链接器指定确切的库,因此它在进行链接时使用它 - 而不是另一个具有相同名称的库。 – 2015-02-06 12:00:40

+0

你为什么认为它没有使用这个库来链接?也许在问题中增加一些细节,说明你是如何诊断问题的,以及以何种方式表现出与你预期的不同。 – Pradhan 2015-02-06 17:46:24

相关问题