LD_LIBRARY_PATH 在哪裡?如何設定 LD_LIBRARY_PATH 環境變數?

LD_LIBRARY_PATH 在哪裡?如何設定 LD_LIBRARY_PATH 環境變數?

我正在嘗試使用 Unix 建立一個 C++ 程式。

我收到錯誤

Linking CXX executable ../../bin/ME
/usr/bin/ld: cannot find -lboost_regex-mt

我聽說我只需要在 LD_LIBRARY_PATH 環境變數中設定 libboost* 的位置,然後像我最初那樣呼叫 make,透過輸入

-L /usr/lib64 -l boost_regex-mt

或者

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

但是LD_LIBRARY_PATH在哪裡呢?如何設定 LD_LIBRARY_PATH 環境變數?

答案1

如何設定 LD_LIBRARY_PATH 環境變數?

當你這樣做時你已經設定了它:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64

但這並不能解決你的問題。$LD_LIBRARY_PATH在執行時查閱,以提供在其中搜尋動態可連結庫的附加目錄清單。在連結時不會查閱它(除了查找建置工具本身所需的庫!)。

為了告訴連結器在建置時在哪裡找到庫,您需要使用-L連結器選項。你也已經這樣做了:

-L /usr/lib64

如果仍然出現錯誤,那麼您需要確保該庫確實存在。您有檔案libboost_regex-mt.solibboost_regex-mt.a在該(或任何)目錄中嗎?請注意,類似的文件libboost_regex-mt.so.othersuffix不計入此目的。如果您沒有,那麼您可能需要安裝該程式庫的發行版開發套件。

答案2

在 LD_LIBRARY_PATH 中永久新增路徑的另一種方法:

編輯.conf文件中的/etc/ld.so.conf.d/.

我曾經安裝過一個應用程序,但它的庫無法被另一個應用程式識別。然後我將路徑(即 )加入/usr/local/hdf5/libx86_64-linux-gnu.conf文件中。只需放入下一行即可。節省。

然後運行sudo ldconfig

有效。

PS:作業系統Ubuntu 14.04

答案3

~/.profile您可以在您的 shell 和/或特定的 init 檔案中設定它(例如,~/.bashrc對於 bash、~/.zshenv對於 zsh)。然後您需要重新啟動 shell(並且可能登出並再次登錄,具體取決於您的選擇)。

您可以透過以下方式檢查您的設定:

env | grep '^LD_LIBRARY_PATH'

編輯:LD_LIBRARY_PATH適用於包含機器代碼的共享庫,其檔案名稱通常包含.so在其名稱中,可能後面跟著由句點分隔的數字,以區分不同的版本。儘管如此,仍有可能LD_LIBRARY_PATH因為 ABI 不符而找不到庫。另請注意,語言(如 Perl 和 Python)和套件可能有自己的庫系統(也可能有.so文件),與LD_LIBRARY_PATH.

答案4

解決方法:

添加到/etc/systemd/system/pm2-node.service

Environment=PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/app/nodejs/local/nvm/versions/node/v7.8.0/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/home/node/.pm2
Environment=LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
Environment=OCI_LIB_DIR=/opt/oracle/instantclient_12_2

相關內容