在 Solaris 上设置应用程序特定LD_LIBRARY_PATH
变量的最佳位置是什么?如何
LD_LIBRARY_PATH
可变工作?
我们目前将它设置在 中.kshrc
,但是不同的应用程序需要不同版本的消息传递框架,但是这些应用程序在相同的用途下运行,因此它们需要不同LD_LIBRARY_PATH
的 ,那么您认为设置此变量的最佳位置是什么?
基本上我想弄清楚如何使这个变量路径成为应用程序的一部分,而不是特定于用户环境。
通常我只会有一个启动应用程序的 shell 脚本。在 shell 脚本中,我会将 LD_LIBRARY_PATH 设置为该应用程序所需的任何值,然后让脚本启动该应用程序。这样做应该会导致仅为该应用程序设置路径。
您可以在“ld.so.1”的手册页上找到正式的描述LD_LIBRARY_PATH
,即运行“man ld.so.1”。它还描述了运行时链接器支持的一些其他变量。
除了LD_LIBRARY_PATH
,可执行文件和共享库还可以具有内置的库搜索路径。如果您正在运行一个您自己链接的应用程序,您可以使用 ld 的 -R 选项来设置内置路径(Sun CC 和 gcc 都有执行相同操作的选项)。这可以让您避免LD_LIBRARY_PATH
一开始就使用。
弗拉德,alnc 是正确的。
不建议在 Solaris 上设置 LD_LIBRARY_PATH。完全没有。
如果您需要将特定的运行路径烘焙到您的库或可执行文件中,那么您应该对链接器使用 -R 标志。如果使用 gcc 构建,则使用 -Wl,Rpath (我认为)。
如果您需要为后期构建步骤执行此操作(例如,因为您缺少重新编译的源代码),那么 elfedit(1) 将帮助您很多。它记录在手册页中,也记录在http://docs.oracle.com/cd/E26502_01/html/E26507/index.html的 Linker+Libraries Guide 中
crle 响应是最正确的。在 Solaris 上,LD_LIBRARY_PATH
不应使用。请改用 crle。要查看当前路径,只需单独运行“crle”。要更新列表,请使用crle -u -l /path/to/your/lib/directory
. 需要将-u
更改写入系统配置,否则更改将是临时的。有关更多选项,请参见手册页。
刚发现一个全局LD_LIBRARY_PATH不生效的案例,只好在app前封装一个脚本,设置LD_LIBRARY_PATH。如果您通过 blastwave 中的 pkgutil 在 /opt/csw/lib 下安装了很多库,crle 是一个很好的全局解决方案。
您可以检查您的 .profile 或 .profile.user 文件。会有一个注释条目。不建议使用它,因为它已损坏。您应该通过将值传递给标志而不是使用变量来构建二进制文件。
您可以使用 crle 命令:
crle -l /path/to/your/lib/file