gpt4 book ai didi

c++ - 运行时链接到不在 LD_LIBRARY_PATH 上的动态库

转载 作者:搜寻专家 更新时间:2023-10-31 00:26:55 31 4
gpt4 key购买 nike

我正在尝试将我的一个项目链接到一组特定的自定义编译库,这些库位于项目的基本目录 [proj_dir]/lib - 而不是任何系统的/lib、/usr/lib 或/usr/local/lib - 避免与这些相同库的已安装库存版本发生冲突。

我可以通过使用 -L 标志传递库路径来编译项目,但是在加载共享库 libXXX.so 时出现 错误:无法打开共享对象文件:当我运行编译后的二进制文件时,没有这样的文件或目录ldd 告诉我它找不到那些特定的库。

另一方面,如果我将 LD_LIBRARY_PATH=[proj_dir]/lib 传递给可执行文件,我就可以毫无问题地运行它。不过,有没有办法隐式链接这些库,而无需在运行时手动设置 LD_LIBRARY_PATH

最佳答案

你可以

  1. 编写一个包装脚本以始终包含LD_LIBRARY_PATH在调用实际程序之前(更灵活)。
  2. 添加-Wl,-rpath=<directory>到您的链接器选项以将目录添加到运行时库搜索路径。所以假设你有一个 libfoo.so并且您的程序和 DSO 位于同一目录中,您的编译命令可能如下所示:gcc -o myprogam main.c -L. -lfoo -Wl,-rpath='$ORIGIN' .

更新:正如 Maxim 正确指出的那样,设置 -rpath=. is dangerous and should be avoided .

对于 -Wl, , 请参阅 gcc manpage-rpath查看ld manpage .

关于c++ - 运行时链接到不在 LD_LIBRARY_PATH 上的动态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50762540/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com