在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

Vladr,alanc是对的。

不建议在Solaris上设置LD_LIBRARY_PATH。完全没有。

如果需要将特定的运行路径烘焙到库或可执行文件中, 那么你应该使用-R标志到链接器。如果用gcc构建,那么 使用-Wl,Rpath(我想)。

如果你需要在构建后的步骤中执行此操作(例如,因为你缺乏 来源重新编译),然后elfedit(1)会帮助你很多。记录在案 在联机帮助页中,以及 http://中的链接+库指南docs.oracle.com/cd/E26502_01/html/E26507/index.html

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

刚刚发现全局LD_LIBRARY_PATH没有生效的情况,我不得不在应用程序之前包装脚本并设置LD_LIBRARY_PATH。 如果你在/ opt / csw / lib下安装了大量的lib,那么crle是一个很好的全局解决方案,来自blastwave的pkgutil。

你可以查看你的.profile或.profile.user文件。它会有一个注释条目。不推荐使用它,因为它已经坏了。你应该通过将值传递给flags来构建二进制文件而不是使用变量

您可以使用crle命令:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top