LD_LIBRARY_PATH 配置設置問題
我面臨一個奇怪但明智的問題,我有 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 環境,您也可以將上述內容(當然需要修改)放入桌面快捷方式。