在Solaris上设置特定于应用程序的LD_LIBRARY_PATH
变量的最佳位置是什么?
怎么做
LD_LIBRARY_PATH
变量工作?
我们目前在.kshrc
中进行了设置,但不同的应用程序需要不同版本的消息传递框架,但这些应用程序在相同的用途下运行,因此它们需要不同的LD_LIBRARY_PATH
,所以在您看来是什么是设置此变量的最佳位置?
基本上我试图弄清楚如何使这个变量路径成为应用程序的一部分,而不是特定于用户环境。
答案 0 :(得分:14)
通常我只有一个启动应用程序的shell脚本。在shell脚本中,我将LD_LIBRARY_PATH设置为我对该应用程序所需的任何内容,然后让脚本启动该应用程序。这样做应该导致仅为该应用程序设置路径。
答案 1 :(得分:6)
您可以在“ld.so.1”的手册页上找到LD_LIBRARY_PATH
的正式描述,即运行“man ld.so.1”。它还描述了运行时链接程序所遵循的一些其他变量。
除了LD_LIBRARY_PATH
之外,可执行文件和共享库还可以为库提供内置的搜索路径。如果您正在运行自己链接的应用程序,则可以使用ld的-R选项设置内置路径(Sun CC和gcc都可以选择执行相同的操作)。这可能允许您首先避免使用LD_LIBRARY_PATH
。
答案 2 :(得分:2)
Vladr,alanc是对的。
不建议在Solaris上设置LD_LIBRARY_PATH。完全没有。
如果需要将特定的运行路径烘焙到库或可执行文件中, 那么你应该使用-R标志到链接器。如果用gcc构建,那么 使用-Wl,Rpath(我想)。
如果你需要在构建后的步骤中执行此操作(例如,因为你缺乏 来源重新编译),然后elfedit(1)会帮助你很多。记录在案 在联机帮助页中,以及http://docs.oracle.com/cd/E26502_01/html/E26507/index.html
中的链接程序+库指南中答案 3 :(得分:1)
crle的反应是最正确的。在Solaris上,不应使用LD_LIBRARY_PATH
。请改用crle。要查看当前路径,只需单独运行“crle”即可。要更新列表,请使用crle -u -l /path/to/your/lib/directory
。将更改写入系统配置需要-u
,否则更改将是临时的。有关更多选项,请参见手册页。
答案 4 :(得分:0)
刚刚发现全局LD_LIBRARY_PATH没有生效的情况,我不得不在应用程序之前包装脚本并设置LD_LIBRARY_PATH。 如果你在/ opt / csw / lib下安装了大量的libs,那么crle是一个很好的全局解决方案,来自blastwave的pkgutil。
答案 5 :(得分:0)
你可以查看你的.profile或.profile.user文件。它会有一个注释条目。不推荐使用它,因为它已经坏了。你应该通过将值传递给flags来构建二进制文件而不是使用变量
答案 6 :(得分:-1)
您可以使用crle命令:
crle -l / path / to / your / lib / file