有没有办法将相对库路径添加到可执行文件,以避免设置LD_LIBRARY_PATH

joe*_*ler 3 c++ linker makefile shared-libraries ldd

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

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

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

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

Ama*_*eus 6

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

从其手册页:

-rpath = DIR

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

  • 一般来说,比rpath更有用,就像它有用一样,是rpath的`$ ORIGIN`值.在http://man7.org/linux/man-pages/man8/ld.so.8.html上搜索"$ ORIGIN"以获取更多信息. (5认同)