找不到“ GLIBCXX_3.4.11”,请运行来自MATLAB的系统调用,该系统调用链接到的glibc与matlab bin路径中的glibc有所不同

|| 我试图绕过使用MEX链接到MATLAB的过程,只是使用\“!\”调用二进制文件,如下所示:
>> !template_image_rigid -args ....
template_image_rigid: /opt/MatlabR2010a/sys/os/glnxa64/libstdc++.so.6: version    `GLIBCXX_3.4.11\' not found (required by /usr/lib/libboost_program_options.so.1.40.0)
template_image_rigid: /opt/MatlabR2010a/sys/os/glnxa64/libstdc++.so.6: version `GLIBCXX_3.4.11\' not found (required by /usr/lib/libdirac_encoder.so.0)
有没有一种方法可以从MATLAB内部轻松修复此动态链接问题?我知道我可以使用MATLAB重新编译源代码并使用MEX调用,但是由于运行求解器需要一些时间,因此我只想将其作为shell命令运行,然后将文本数据导入到MATLAB中。 如果有帮助,可在以下位置找到源和CMakeLists.txt:https://github.com/pkarasev3/nlmagick/tree/master/samples     
已邀请:
Grr,社区=失败。 诊断:在matlab中执行!gnome-terminal并查看\“ env \”:
env | grep Matlab
这使
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_PATH不好。 技巧:编写一个poltergeist脚本并从gnome-terminal运行它,从Matlab启动它,方法是:
!./hack.sh  RunStuffThatLinksElsewhere
其中hack.sh是一个类似以下内容的脚本:
#!/bin/bash
source ~/.bashrc
export LD_LIBRARY_PATH=\'\'
gnome-terminal --command=\"${1}\"
因此,一个简单的测试是使用\“ eog \”进行尝试,此hack解决了链接问题,并允许您从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 然后用系统libstdc的链接替换matlab libstdc版本。 从命令行键入(用您的设置替换[....]):
cd [matlab_dir]/sys/os/glnx86 
mv libstdc++.so.6 libstdc++.so.6-OLD 
ln -s [your_system_version_of_libstdc] libstdc++.so.6
    
我最近遇到了同样的问题。我的解决方案还像其他答案一样使用poltergeist脚本。脚本如下(poltergeist.sh):
#!/bin/bash
export LD_LIBRARY_PATH=\'\'
eval \"$@\"
它基本上是重置库路径,然后评估由脚本参数给出的调用。然后从matlab内部以这种方式调用:
system([pwd,\'/poltergeist.sh echo hello world!\']);
这种方法的优点是您可以在matlab中动态修改call命令。据我所知,使用当前提供的答案中的bang语法是不可能的。     

要回复问题请先登录注册