在從centos遷移到ubuntu系統后,我在安裝jdk時遇到了問題。我的操作步驟如下:
sudo tar -xvzf jdk-8u201-linux-x64.tar.gz
結果,我收到了如下錯誤信息:
錯誤信息表明系統無法找到JDK文件,盡管我已經將JDK放置在/opt目錄下。
經過多種嘗試后,我意識到安裝包的存放位置可能也有講究。最終,我采用了添加完整路徑的方法來解決問題:
sudo tar -xvzf /opt/jdk-8u201-linux-x64.tar.gz
導致這個問題的原因可能有很多種,包括權限不足、壓縮包損壞、磁盤空間不足等,但這里主要討論共享庫路徑問題。默認的Linux共享庫搜索路徑是/lib和/usr/lib目錄,如果共享庫不在這些路徑下,進程運行時無法自動鏈接。
解決共享庫路徑問題的方法有以下幾種:
方法一:在鏈接時使用靜態庫,并在編譯腳本或命令中指定JDK文件的完整路徑。我使用了絕對路徑來解決這個問題。
方法二:將文件直接復制到可搜索的路徑中,如/lib或/usr/lib目錄下。
cp -r 文件 目標路徑
方法三:添加搜索路徑,使用ldconfig命令。如果共享庫文件安裝在/usr/local/lib或其他非/lib或/usr/lib目錄下,需要將新共享庫目錄加入到共享庫配置文件/etc/ld.so.conf中。
# 執行命令 cat /etc/ld.so.conf # 沒有編輯過/etc/ld.so.conf文件會輸出: include ld.so.conf.d/*.conf # 把新共享庫目錄加入到共享庫配置文件 echo "/usr/local/lib" >> /etc/ld.so.conf # 執行 ldconfig 命令 ldconfig
方法四:修改LD_LIBRARY_PATH環境變量。這個變量告訴loader在哪些目錄中可以找到共享庫。可以在.bashrc或bash_profile或shell中添加以下語句:
- 打開Terminal(終端)
- 輸入:vi ~/.bash_profile
- 設置LD_LIBRARY_PATH:export LD_LIBRARY_PATH=/opt:LD_LIBRARY_PATH
- 輸入::wq //保存并退出vi
- 修改立即生效:source ~/.bash_profile
- 查看環境變量的值:echo LD_LIBRARY_PATH
- 如果bash_profile存在的情況下,可以通過open ~/.bash_profile的命令打開,編輯好后再執行5的方式
注意??:
- ~/.bash_profile中有個點
- 新增或修改環境變量的值后,需要source一下才能立即生效。如果是刪除一個環境變量,必須輸入exit以logout當前shell,然后再重新打開一個新的shell并login才能生效。
盡管我使用了第一種方法解決了問題,但我個人認為使用第四種方法比較好,因為它可以一勞永逸地解決問題。
最近收到很多小伙伴的留言和私聊,以上方法似乎還不能完全解決部分同學的問題。我正在協助一個同學解決同款問題,等解決了,我會更新最新的解決辦法。