2009-03-02 79 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

相關問題