如何选择一个库位置而不是另一个库位置?

时间:2015-02-06 06:34:15

标签: c++ linker shared-libraries clang

我在libc++.so中有一个系统范围的/usr/lib64。我想将我的二进制文件与位于其他地方的另一个libc++.so相关联,例如,在$HOME/.local/lib中。此外,我希望能够以与以前相同的方式查找所有其他库,假设$HOME/.local/lib仅包含libc++.so

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


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

1 个答案:

答案 0 :(得分:1)

-L将目录添加到链接器使用的搜索路径中。这对运行时使用的搜索路径没有影响。在运行时,搜索路径按顺序为:

  1. 环境变量LD_LIBRARY_PATH
  2. 可执行文件中指定的
  3. rpath
  4. 系统库路径
  5. 虽然您可以通过指定环境变量LD_LIBRARY_PATH=$HOME/.local/lib来实现所需,但它是一个糟糕的解决方案,因为它修改了所有可执行文件的搜索路径。指定rpath是一个更清晰的解决方案,因为它只会影响可执行文件的行为。您可以通过工具链的链接器选项执行此操作,该选项很可能是-rpath。所以命令是clang++ -rpath $HOME/.local/lib -lc++