Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux MATLAB无效MEX文件错误:缺少符号无效\u参数_Linux_Matlab_Gcc_Mex_Linker Errors - Fatal编程技术网

Linux MATLAB无效MEX文件错误:缺少符号无效\u参数

Linux MATLAB无效MEX文件错误:缺少符号无效\u参数,linux,matlab,gcc,mex,linker-errors,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

我有一个问题,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'.
在那个MEX文件上运行
ldd
,我会

> 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\u znst16无效\u 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
的原因吗?还是有办法让它发挥作用?

免责声明:我认为这并不能回答全部问题,但可能有助于解决问题。我本想把它作为评论发布,但我还没有足够的声誉

指:

所以符号肯定在那里;因此,我将我的LD_LIBRARY_路径设置为指向该目录,即/usr/lib/x86_64-linux-gnu/(这应该不是必需的,对吧?)


根据这一点,您需要在运行时设置
LD_LIBRARY_PATH
以指向您想要链接到的任何目录。这可能就是为什么找不到
libmex.so
libmx.so
的原因。我认为libstdc++也是如此。所以.6?

我在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 $@
这解决了我缺少符号的问题,但我不知道我们是否有同样的问题。根据,Matlab2017a只支持gcc-4.9,而不支持5或6。使用支持的编译器重新编译解决了该问题