`GLIBCXX_3.4.11';未找到,从MATLAB运行系统调用,该调用链接到glibc,与';matlab bin路径中的s
我试图避免使用MEX链接到MATLAB,只需使用“!”调用二进制文件,如: 有没有一种方法可以从MATLAB中轻松解决这个动态链接问题?我知道我可以用MATLAB重新编译源代码并使用MEX调用,但由于运行解算器需要一段时间,我只想将其作为shell命令运行,稍后将文本数据导入MATLAB`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
如果有帮助,可以在此处找到源文件&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!']);