Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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
`GLIBCXX_3.4.11';未找到,从MATLAB运行系统调用,该调用链接到glibc,与';matlab bin路径中的s_Matlab_Linker_Dynamic Linking_Glibc - Fatal编程技术网

`GLIBCXX_3.4.11';未找到,从MATLAB运行系统调用,该调用链接到glibc,与';matlab bin路径中的s

`GLIBCXX_3.4.11';未找到,从MATLAB运行系统调用,该调用链接到glibc,与';matlab bin路径中的s,matlab,linker,dynamic-linking,glibc,Matlab,Linker,Dynamic Linking,Glibc,我试图避免使用MEX链接到MATLAB,只需使用“!”调用二进制文件,如: 有没有一种方法可以从MATLAB中轻松解决这个动态链接问题?我知道我可以用MATLAB重新编译源代码并使用MEX调用,但由于运行解算器需要一段时间,我只想将其作为shell命令运行,稍后将文本数据导入MATLAB 如果有帮助,可以在此处找到源文件&CMakeLists.txt:Grr,community=fail 诊断噪音:做!从matlab中选择gnome终端并查看“env”: 给 XKEYSYMDB=/opt/Mat

我试图避免使用MEX链接到MATLAB,只需使用“!”调用二进制文件,如:

有没有一种方法可以从MATLAB中轻松解决这个动态链接问题?我知道我可以用MATLAB重新编译源代码并使用MEX调用,但由于运行解算器需要一段时间,我只想将其作为shell命令运行,稍后将文本数据导入MATLAB


如果有帮助,可以在此处找到源文件&CMakeLists.txt:

Grr,community=fail

诊断噪音:做!从matlab中选择gnome终端并查看“env”:

XKEYSYMDB=/opt/MatlabR2010a/X11/app-defaults/XKeysymDB
MATLABPATH=/opt/MatlabR2010a/toolbox/local
XAPPLRESDIR=/opt/MatlabR2010a/X11/app-defaults
LD_LIBRARY_PATH=/opt/MatlabR2010a/sys/os/glnxa64:/opt/MatlabR2010a/bin/glnxa64:/opt/MatlabR2010a/extern/lib/glnxa64:/opt/MatlabR2010a/runtime/glnxa64:/opt/MatlabR2010a/sys/java/jre/glnxa64/jre/lib/amd64/native_threads:/opt/MatlabR2010a/sys/java/jre/glnxa64/jre/lib/a  md64/server:/opt/MatlabR2010a/sys/java/jre/glnxa64/jre/lib/amd64
OSG_LD_LIBRARY_PATH=/opt/MatlabR2010a/sys/openscenegraph/lib/glnxa64
TOOLBOX=/opt/MatlabR2010a/toolbox
XFILESEARCHPATH=/opt/MatlabR2010a/sys/java/jre/glnxa64/jre/lib/locale/%L/%T/%N%S::/usr/dt/app-defaults/%L/Dt
MATLAB=/opt/MatlabR2010a
好的,那么LD_LIBRARY_路径是坏的

诀窍:编写一个恶鬼脚本并从gnome终端运行,从Matlab启动它,使用:

!./hack.sh  RunStuffThatLinksElsewhere
其中hack.sh是一个脚本,包含以下内容:

#!/bin/bash
source ~/.bashrc
export LD_LIBRARY_PATH=''
gnome-terminal --command="${1}"
因此,一个简单的测试是使用“eog”进行测试,这个黑客绕过了链接问题,让您可以在matlab中运行它…

更简单:

 setenv('foo',num2str(some_value) )
 !LD_LIBRARY_PATH=""   &&   ./my_binary -f $foo
 disp('done with external program!')

我解决了这个问题,将libstdc++.so.6的版本替换为我系统中的更新版本(我使用的是ubuntu 12.04)

首先找到libstdc++.so.6的系统版本

从命令行类型:

locate libstdc++.so.6
我的libstdc系统版本是

/usr/lib/i386 linux gnu/libstdc++.so.6

然后将matlab libstdc版本替换为系统libstdc的链接

从命令行类型(将[…]替换为您的设置):


我最近遇到了同样的问题。我的解决方案也像其他答案一样使用了恶作剧脚本。脚本如下(poltergeist.sh):

它基本上重置库路径,然后计算参数对脚本的调用。在matlab中,我以这种方式调用:

system([pwd,'/poltergeist.sh echo hello world!']);

这种方法的优点是可以在matlab中动态修改调用命令。据我所知,在当前提供的答案中使用bang语法是不可能的。

嘿,很抱歉打扰你一个老问题。你能帮我理解一下setenv('foo',num2str(some_value))在做什么吗?(提前支付)它在shell中设置了一个环境变量,因此可以在以“!”开头的后续shell命令中使用它。。。请注意,此示例是linux/unix,对于windows,您需要对某些版本的Matlab进行语法更改,如%而不是$,这可能会导致Matlab可执行文件无法运行。
locate libstdc++.so.6
cd [matlab_dir]/sys/os/glnx86 
mv libstdc++.so.6 libstdc++.so.6-OLD 
ln -s [your_system_version_of_libstdc] libstdc++.so.6
#!/bin/bash
export LD_LIBRARY_PATH=''
eval "$@"
system([pwd,'/poltergeist.sh echo hello world!']);