2009-03-02 72 views
9

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

LD_LIBRARY_PATH

变量的工作?

目前,我们把它架在.kshrc,但不同的应用需要不同版本的消息框架,但在相同的使用运行这些应用程序,因此,他们需要不同的LD_LIBRARY_PATH,所以在您看来,什么是设置这个最好的地方变量?

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

回答

14

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

+0

谢谢,那就是我正在思考的问题。然而,将该变量放在外部app_profile文件中然后在脚本中输入该文件是否合理?或者你看到有什么问题吗?我在想,因为多个应用程序确实需要相同的路径,所以可以将其外部化? – 2009-03-02 22:24:03

+0

需要在启动可执行文件之前设置LD_LIBRARY_PATH(或LD_LIBRARY_PATH_32和LD_LIBRARY_PATH_64) - 因为在到达main()之前ld.so.1会读取它,之后不会重新读取它。 – 2009-03-02 22:29:02

+0

@Ville - 我认为这样会有效,但你首先要试一下,以确保 – 2009-03-03 00:57:26

6

在“ld.so.1”的手册页上可以找到关于LD_LIBRARY_PATH的正式说明,例如运行“man ld.so.1”。它还描述了运行时链接程序所遵守的一些其他变量。

除了LD_LIBRARY_PATH之外,可执行文件和共享库也可以具有库的内置搜索路径。如果您正在运行自己链接的应用程序,则可以使用ld的-R选项来设置内置路径(Sun CC和gcc都可以选择执行相同的操作)。这可能会让你避免首先使用LD_LIBRARY_PATH

-1

可以使用程序crle命令:

程序crle -l /路径/要/你的/ lib目录/文件

1

的程序crle反应是最正确的。在Solaris上,不应使用LD_LIBRARY_PATH。改用crle。要查看当前路径,只需单独运行“crle”即可。要更新列表,请使用crle -u -l /path/to/your/lib/directory。需要-u来更改系统配置,否则更改将是暂时的。请参阅手册页以获取更多选项。

0

刚刚发现一个全局LD_LIBRARY_PATH不生效的情况,我不得不包装一个脚本并在应用程序之前设置LD_LIBRARY_PATH。 如果您通过blastwave的pkgutil在/ opt/csw/lib下安装了许多库,crle是一个很好的全局解决方案。

0

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

2

弗拉德,阿兰克是正确的。

不建议在Solaris上设置LD_LIBRARY_PATH。完全一样。

如果您需要将特定运行路径烧入您的库或可执行文件, 那么您应该在链接器中使用-R标志。如果用gcc构建,那么 使用-Wl,Rpath(我认为)。

如果您需要在构建后步骤中执行此操作(例如,因为您缺少重新编译的 源代码),那么elfedit(1)将对您有所帮助。它在手册页中记录为 ,在链接库+库指南中也有记录http://docs.oracle.com/cd/E26502_01/html/E26507/index.html