2014-09-30 23 views
3

我正在构建链接某些共享库的程序。它们包含在与我的项目相关的lib /目录中。有没有办法将相对库路径添加到可执行文件以避免设置LD_LIBRARY_PATH

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

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

我能够编译可执行文件并运行它时,.so文件是从连接与使用strace/LDD

+4

你不能从一个临时改变库加载路径的脚本运行该程序吗 – 2014-09-30 22:47:54

+0

是的,如果一切都失败了,那将是一个选项。我可以创建一个从Makefile执行此操作的包装器。最终我想使用Boost :: Python来创建一个不适用于此方法的python模块。在最终解决/ usr/lib问题之前寻找选项 – joeButler 2014-09-30 22:53:54

回答

6

您可以使用-rpath所示的标准路径之一(使用LD作为接头)。

从它的手册页:

-rpath = DIR

添加目录到运行时库搜索路径。将ELF可执行文件与共享对象链接时使用。将所有-rpath参数连接起来并传递给运行时链接程序,该链接程序使用它们在运行时定位共享对象。在查找明确包含在链接中的共享对象所需的共享对象时,也会使用-rpath选项;请参阅-rpath-link选项的说明。如果在链接ELF可执行文件时未使用-rpath,则将使用环境变量“LD_RUN_PATH”的内容(如果已定义)。

+5

rpath通常比rpath更有用,它与rpath一样有用,它是rpath的'$ ORIGIN'值。在http://man7.org/linux/man-pages/man8/ld.so.8.html上搜索'$ ORIGIN'获取更多信息。 – 2014-09-30 23:11:21

相关问题