linux - MATLAB 无效的 MEX 文件错误 : missing symbol invalid_argument

标签 linux matlab gcc mex linker-errors

我遇到了 MATLAB (R2017a) 无法加载某个 MEX 文件的问题:

Invalid MEX-file '/home/travis/local/lib/acadosMEX.mexa64': 

Missing symbol '_ZdlPvm' required by '/home/travis/local/lib/acadosMEX.mexa64'
Missing symbol '_ZNSt13runtime_errorC1EPKc' required by '/home/travis/local/lib/acadosMEX.mexa64'
Missing symbol '_ZNSt16invalid_argumentC1EPKc' required by '/home/travis/local/lib/acadosMEX.mexa64'.

正在运行ldd那个 MEX 文件给了我

> ldd $HOME/local/lib/acadosMEX.mexa64

linux-vdso.so.1 =>  (0x00007ffe3fab2000)
libmex.so => not found
libmx.so => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9adb90a000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9adb5f8000)
libblas.so.3 => /usr/lib/libblas.so.3 (0x00007f9ad9def000)
libgfortran.so.3 => /usr/lib/x86_64-linux-gnu/libgfortran.so.3 (0x00007f9ad9ac7000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9ad97c1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9ad93f9000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9ad91e1000)
/lib64/ld-linux-x86-64.so.2 (0x000056477b9a3000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9ad8fc3000)
libquadmath.so.0 => /usr/lib/x86_64-linux-gnu/libquadmath.so.0 (0x00007f9ad8d84000)

现在如果我 grep _ZNSt16invalid_argumentC1EPKc :

> nm -D /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep _ZNSt16invalid_argumentC1EPKc
000000000008b520 T _ZNSt16invalid_argumentC1EPKc

所以这个符号肯定是存在的;因此我设置了我的LD_LIBRARY_PATH指向该目录,即 /usr/lib/x86_64-linux-gnu/ (这应该没有必要,对吧?)。

我还应该说我用 g++-5 尝试了所有这些( g++-6 给出相同的错误),但使用 g++-4.9它按要求工作。

这一切都是MATLAB不支持的原因吗g++>=5 (link) ?或者还有什么方法可以让它发挥作用吗?

最佳答案

我在 Linux (Ubuntu 16.04) 上也遇到了缺少符号的问题。就我而言,我没有直接从终端调用 Matlab (matlabroot/bin/matlab),而是使用以下脚本:

#!/bin/bash
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 \
LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu \
matlab $@

这解决了我的符号缺失问题,但我不知道我们是否也遇到过同样的问题。

关于linux - MATLAB 无效的 MEX 文件错误 : missing symbol invalid_argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43877694/

相关文章:

python - 在 Python 中从控制台使用断点进行调试

c++ - 静态 const 类成员的奇怪链接器问题

linux - 为什么堆栈段在树莓派上是可执行的?

python - 在 Ubuntu 中安装 graph-tool 时配置错误(需要 c++14)

linux - 按 ID 拆分内容(第一列)并根据格式生成新的数据文件

linux - 如何在 Linux 上优雅地退出当前 session ?

c - 执行错误 : no such file or directory

linux - 从头开始加固 BSD

Matlab生成随机数和重叠检查

matlab - 如何更改 Matlab 图中线条的顺序?