Libraries

Matlab QT 庫阻止程序執行

  • June 17, 2021

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請在連結器中使用選項,和/或 set LDFLAGS,而不是LD_LIBRARY_PATH.

引用自:https://unix.stackexchange.com/questions/654547