【问题标题】:Is there a way to add a relative library path to an executable to avoid setting LD_LIBRARY_PATH有没有办法将相对库路径添加到可执行文件以避免设置 LD_LIBRARY_PATH
【发布时间】:2014-11-25 16:54:06
【问题描述】:

我正在构建一个链接一些共享库的程序。它们包含在相对于我的项目的 lib/ 目录中。

我遇到的问题是我希望可执行文件知道在相对 ../lib 目录中搜索库。这可能吗?

我真的不想更改 ld_library_path 或将文件移动到根拥有的标准路径之一。

当 .so 文件位于 strace/ldd 显示的标准路径之一上时,我能够编译可执行文件并运行它

【问题讨论】:

  • 你不能从临时更改库加载路径的脚本运行程序
  • 是的,如果一切都失败了,那将是一个选择。我可以创建一个从 Makefile 执行此操作的包装器。最终,我想使用 Boost::Python 创建一个不适用于此方法的 python 模块。只是在我最终将事情处理到 /usr/lib 之前寻找选项

标签: c++ makefile linker shared-libraries ldd


【解决方案1】:

您可以使用链接器中的-rpath(使用 ld 作为链接器)。

从其手册页:

-rpath=目录

将目录添加到运行时库搜索路径。这在将 ELF 可执行文件与共享对象链接时使用。所有 -rpath 参数都被连接并传递给运行时链接器,运行时链接器使用它们在运行时定位共享对象。 -rpath 选项也用于定位明确包含在链接中的共享对象所需的共享对象;请参阅 -rpath-link 选项的说明。如果在链接 ELF 可执行文件时不使用 -rpath,则如果定义了环境变量“LD_RUN_PATH”,则将使用它的内容。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-31
  • 2012-08-22
  • 2015-05-23
相关资源
最近更新 更多