Linux

LD_LIBRARY_PATH 配置設置問題

  • December 11, 2018

我面臨一個奇怪但明智的問題,我有 2 個 ORACLE_HOME,第一個指向 ORACLE 數據庫軟體,第二個指向 ORACLE 客戶端軟體。

為什麼我被迫這樣做 - 原因是:在我的系統中,Pro *c 是從 ORACLE 數據庫 ORACLE_HOME 編譯的,但是 Pro *Cobol 是從 ORACLE 客戶端 ORACLE_HOME 編譯的。

*編譯 Pro Cobol:

echo $LD_LIBRARY_PATH
/u01/app/oracle/product/11.2.0/client/lib:/opt/FJSVcbl64/lib:/opt/FJSVXbsrt/lib:/opt/FJSVXmeft/lib:/opt/FJSVcbl/COBOL/lib:/opt/FJSVcbl/COBOLRT/lib

*編譯 Pro C

echo $LD_LIBRARY_PATH
/u01/app/oracle/product/11.2.0/db_1/lib:/opt/FJSVcbl64/lib:/opt/FJSVXbsrt/lib:/opt/FJSVXmeft/lib:/opt/FJSVcbl/COBOL/lib:/opt/FJSVcbl/COBOLRT/lib

如果我將路徑即 /u01/app/oracle/product/11.2.0/db_1/lib 和 /u01/app/oracle/product/11.2.0/client/lib 都放在 1 LD_LIBRARY_PATH 中,則只有先到者才能獲得成功的。

有沒有辦法解決這個問題?

對於臨時修復,我在每個文件中創建了 2 個具有不同 LD_LIBRARY_PATH 的小腳本;所以我在編譯 Pr *C 或 Pro *Cobol 之前呼叫這個腳本。

我只是不想呼叫任何腳本,只有 1 個 LD _LIBRARY_PATH 必須能夠修復它。

讓我知道。

謝謝!

正如@Thomas 在他的評論中所說,問題在於客戶端和伺服器包含一組非常相似的庫,如果找到具有匹配名稱的庫,則使用它,無論它最終是否有效。

沒有辦法克服這一點,至少不是你想要的方式。沒有“特定於應用程序” LD_LIBRARY_PATH,因此您可能不得不堅持使用您的腳本。

無法在 LD_LIBRARY_PATH 中給出 2 個具有相同名稱的庫文件的路徑,系統讀取順序中的第一個將被首先讀取和使用。然而…

如果您在命令前面(在同一行)使用 LD_LIBRARY_PATH=…. 呼叫您的命令,那麼您可以避免需要一個腳本來切換變數。

除了變數定義和命令之間的單個空格之外,不應有分隔符,如下所示:

LD_LIBRARY_PATH=/usr/local/lib64:${LD_LIBRARY_PATH} /path/to/your/command

這只會為該命令的單次執行設置變數,所以是的,您每次都必須這樣做。但是,您不必再通過腳本“切換”變數。

如果您使用的是 GUI 環境,您也可以將上述內容(當然需要修改)放入桌面快捷方式。

引用自:https://serverfault.com/questions/822703