Matlab QT 庫阻止程序執行
我
matlab
的機器上有Compiler
工具箱。為了使編譯器程式碼工作,它需要訪問庫。他們應該被保存在LD_LIBRARY_PATH
所以我調整了我
.bashrc
的包括:MATLAB_LIB="/usr/local/MATLAB/MATLAB_Runtime/v95/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v95/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v95/extern/bin/glnxa64" export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MATLAB_LIB
但現在我無法從命令行執行許多程序,例如:
~$ gnuplot gnuplot: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libQt5Network.so.5: no version information available (required by gnuplot) gnuplot: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libQt5Core.so.5: no version information available (required by gnuplot) gnuplot: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libQt5Core.so.5: no version information available (required by gnuplot) gnuplot: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libQt5Gui.so.5: no version information available (required by gnuplot) gnuplot: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libtiff.so.5: no version information available (required by /lib/x86_64-linux-gnu/libgd.so.3) gnuplot: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libtiff.so.5: no version information available (required by /lib/x86_64-linux-gnu/libwx_gtk2u_core-3.0.so.0) gnuplot: relocation error: gnuplot: symbol qt_version_tag version Qt_5.11 not defined in file libQt5Core.so.5 with link time reference
或者
~$ vim vim: symbol lookup error: /lib/x86_64-linux-gnu/libpython3.7m.so.1.0: undefined symbol: XML_SetHashSalt
或者
~$ kate kate: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libQt5Xml.so.5: no version information available (required by kate) kate: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libQt5Core.so.5: no version information available (required by kate) kate: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libQt5Core.so.5: no version information available (required by kate) kate: /usr/local/MATLAB/MATLAB_Runtime/v95/bin/glnxa64/libQt5Widgets.so.5: no version information available (required by kate...
如果我從
.bashrc
文件中刪除庫的定義,一切正常。除了刪除文件中庫的路徑之外,我還能做些什麼來避免這些問題.bashrc
?
您幾乎不應該設置
LD_LIBRARY_PATH
.bashrc ,至少不要在您的 .bashrc 中設置,以便它始終適用。在執行特定程序時設置它,或者使用新的/不同的庫進行測試是可以的,例如
LD_LIBRARY_PATH=" $ LD_LIBRARY_PATH: $ MATLAB_LIB" /path/to/matlab
這將其設置為僅用於該程序的呼叫。如果每次執行時都需要這樣做
matlab
,請使用函式或別名或 shell 腳本包裝器。例如:alias matlab='LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$MATLAB_LIB" matlab'
問題是 linux 執行時動態連結器LD_LIBRARY_PATH 在(& )中列出的預設目錄之前
ld.so
搜尋庫,這意味著 LD_LIBRARY_PATH 中的庫會覆蓋標準系統庫。/etc/ld.so.conf``/etc/ld.so.conf.d/
這有時很有用,例如在測試庫的開發版本時,但否則往往會搞砸你的系統。
在您的情況下,matlab 可能與較舊(或只是不同)版本的 Qt 庫(以及 libpython,從外觀上看)連結,並且需要這些特定版本。您系統上安裝的所有其他程序都是針對系統 lib 版本編譯的,並且當您告訴
ld.so
使用 matlab 的版本時會中斷。所以,不要那樣做。一個快速的Google搜尋提出了以下頁面,這些頁面更詳細地解釋了這個問題:
順便說一句,如果您正在編譯東西,
-L
請在連結器中使用選項,和/或 setLDFLAGS
,而不是LD_LIBRARY_PATH
.