如何重新编译一个程序,使其不需要设置 LD_LIBRARY_PATH 即可运行?

如何重新编译一个程序,使其不需要设置 LD_LIBRARY_PATH 即可运行?

在一台没有管理员权限的 Solaris 服务器上,我正在编译各种软件并安装在 中$HOME/usr,而且大部分都运行正常。但是,我以这种方式编译的一些程序依赖于 libiconv,我也已在 中安装了它$HOME/usr/lib。除非我 ,否则这些程序将无法运行export LD_LIBRARY_PATH=$HOME/usr/lib。如果我不这样做,我会收到如下错误:

ld.so.1: rsync: fatal: libiconv.so.2: open failed: No such file or directory

这对于 rsync 来说尤其糟糕,因为它并不总是在 shell 环境中运行,所以我甚至没有选择使用它LD_LIBRARY_PATH来使其工作。是否可以编译我的程序,这样我就不必设置LD_LIBRARY_PATH它们就可以运行?

答案1

您想查找rpath。使用 gcc,您可以传递-Wl,-rpath,/directory/with/library给编译/链接。我认为 Solaris 编译器的标志是-R/directory/with/library,但我没有 Solaris 机器可以检查。

相关内容