未找到版本‘GLIBCXX_3.4.21’

未找到版本‘GLIBCXX_3.4.21’

我正在使用 Matlab for ubuntu R2014a,但无法运行代码,因为出现以下错误

/usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6:version 'GLIBCXX_3.4.21' not found

当我跑步时:

$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.18
GLIBC_2.3.4
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

在这里您可以看到我已经这样做了GLIBCXX_3.4.21,但是我也得到了错误!

答案1

实际上我已经知道问题出在哪里了,因为我的系统是 GCC 5.2.1,

该文件/usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6 是为 GCC 4.4.X 设计的,因此Matlab实际上选择了错误的文件。我只是libstdc++.so.6在终端上使用它创建了一个指向我系统的符号链接 -

ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6

答案2

看起来/usr/local/MATLAB/R2014a/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6缺少 glibc 版本,而不是。现在 Matlab 首先在 Matlab 路径中/usr/lib/x86_64-linux-gnu/libstdc++.so.6尝试,但失败了。libstdc++.so.6

来自 mathworks 的一篇文章以下步骤应该可以启动系统上的 matlablibstdc++.so.6

LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libstdc++.so.6" matlab

答案3

来自@Thomas 的链接是可在 WayBack machine 中找到但这对我来说不起作用,因为我错过了什么GLIBCXX_3.4.22判断strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBC实际上丢失。我通过以下方式修复了这个问题这些步骤也在这里):

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9
sudo apt-get upgrade libstdc++6

答案4

从 matlabsystem()函数运行可执行文件时,我遇到了同样的错误。可执行文件依赖于与 matlab 可用的不同的 libstdc++。对于 Ubuntu 22.04 上的 matlab R2022a 和 R2022b,我只是将 matlab 的快捷方式链接到系统的 libc++,而不是 matlab 附带的快捷方式。也许这是一个与几年前的 OP 不符的极端情况,但这是我在每个版本的 matlab 中遇到过的问题,并且不得不多次修复,每次都让我想到这个问答。

mike@poincare:~$ ls -l /usr/local/MATLAB/R2022b/sys/os/glnxa64/libstdc++*
lrwxrwxrwx 1 root root      19 May 13 15:31 /usr/local/MATLAB/R2022b/sys/os/glnxa64/libstdc++.so.6 -> libstdc++.so.6.0.28*
-r-xr-xr-x 1 root root 1907456 May 13 15:31 /usr/local/MATLAB/R2022b/sys/os/glnxa64/libstdc++.so.6.0.28
mike@poincare:~$ ls -l /usr/lib/x86_64-linux-gnu/libstdc++*
lrwxrwxrwx 1 root root      19 May 13 07:11 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.30
-rw-r--r-- 1 root root 2252096 May 13 07:11 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30
mike@poincare:~$ sudo rm /usr/local/MATLAB/R2022b/sys/os/glnxa64/libstdc++.so.6
mike@poincare:~$ sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30 /usr/local/MATLAB/R2022b/sys/os/glnxa64/libstdc++.so.6

现在,matlab 从我的系统而不是它自己的版本加载 libstdc++.so.6,并且一切运行正常。

相关内容