Matlab QT 库阻止程序运行

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

答案1

您几乎不应该设置LD_LIBRARY_PATH,至少不应该在 .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.soLD_LIBRARY_PATH 中搜索库/etc/ld.so.conf(& )中列出的默认目录/etc/ld.so.conf.d/,这意味着 LD_LIBRARY_PATH 中的库会覆盖标准系统库。

有时这很有用,例如在测试库的开发版本时,但否则往往会搞砸您的系统。

就您而言,matlab 可能与较旧(或只是不同)版本的 Qt 库(从外观上看,还有 libpython)链接,并且需要这些特定版本。系统上安装的所有其他程序都是针对系统 lib 版本进行编译的,当您告诉ld.so使用 matlab 版本时,它们将会中断。所以,不要这样做。

快速谷歌搜索出现了以下页面,更详细地解释了该问题:

顺便说一句,如果您正在编译内容,请-L在链接器中使用选项,和/或设置LDFLAGS,而不是LD_LIBRARY_PATH

相关内容