
我正在嘗試使用 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.so
或libboost_regex-mt.a
在該(或任何)目錄中嗎?請注意,類似的文件libboost_regex-mt.so.othersuffix
不計入此目的。如果您沒有,那麼您可能需要安裝該程式庫的發行版開發套件。
答案2
在 LD_LIBRARY_PATH 中永久新增路徑的另一種方法:
編輯.conf
文件中的/etc/ld.so.conf.d/
.
我曾經安裝過一個應用程序,但它的庫無法被另一個應用程式識別。然後我將路徑(即 )加入/usr/local/hdf5/lib
到x86_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