9

在 Solaris 上设置应用程序特定LD_LIBRARY_PATH变量的最佳位置是什么?如何

LD_LIBRARY_PATH

可变工作?

我们目前将它设置在 中.kshrc,但是不同的应用程序需要不同版本的消息传递框架,但是这些应用程序在相同的用途下运行,因此它们需要不同LD_LIBRARY_PATH的 ,那么您认为设置此变量的最佳位置是什么?

基本上我想弄清楚如何使这个变量路径成为应用程序的一部分,而不是特定于用户环境。

4

7 回答 7

14

通常我只会有一个启动应用程序的 shell 脚本。在 shell 脚本中,我会将 LD_LIBRARY_PATH 设置为该应用程序所需的任何值,然后让脚本启动该应用程序。这样做应该会导致仅为该应用程序设置路径。

于 2009-03-02T22:11:09.913 回答
6

您可以在“ld.so.1”的手册页上找到正式的描述LD_LIBRARY_PATH,即运行“man ld.so.1”。它还描述了运行时链接器支持的一些其他变量。

除了LD_LIBRARY_PATH,可执行文件和共享库还可以具有内置的库搜索路径。如果您正在运行一个您自己链接的应用程序,您可以使用 ld 的 -R 选项来设置内置路径(Sun CC 和 gcc 都有执行相同操作的选项)。这可以让您避免LD_LIBRARY_PATH一开始就使用。

于 2009-03-03T21:58:18.597 回答
2

弗拉德,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 中

于 2014-02-04T02:47:59.860 回答
1

crle 响应是最正确的。在 Solaris 上,LD_LIBRARY_PATH不应使用。请改用 crle。要查看当前路径,只需单独运行“crle”。要更新列表,请使用crle -u -l /path/to/your/lib/directory. 需要将-u更改写入系统配置,否则更改将是临时的。有关更多选项,请参见手册页。

于 2010-06-09T15:34:52.900 回答
0

刚发现一个全局LD_LIBRARY_PATH不生效的案例,只好在app前封装一个脚本,设置LD_LIBRARY_PATH。如果您通过 blastwave 中的 pkgutil 在 /opt/csw/lib 下安装了很多库,crle 是一个很好的全局解决方案。

于 2010-09-17T01:36:01.387 回答
0

您可以检查您的 .profile 或 .profile.user 文件。会有一个注释条目。不建议使用它,因为它已损坏。您应该通过将值传递给标志而不是使用变量来构建二进制文件。

于 2013-04-20T23:10:51.630 回答
-1

您可以使用 crle 命令:

crle -l /path/to/your/lib/file

于 2010-01-03T02:11:47.243 回答