'GLIBCXX_3.4.11' не найден, запустите системный вызов из MATLAB, который ссылается на glibc, отличный от того, что находится в пути к каталогу matlab bin - PullRequest
2 голосов
/ 18 апреля 2011

Я пытаюсь обойти использование 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, но, поскольку для запуска решателя требуется некоторое время, я просто хочу запустить его как команду оболочки и импортировать текстовые данные позже в MATLAB.

Если это поможет, источник & CMakeLists.txt можно найти здесь: https://github.com/pkarasev3/nlmagick/tree/master/samples

Ответы [ 4 ]

2 голосов
/ 31 мая 2011

Проще:

 setenv('foo',num2str(some_value) )
 !LD_LIBRARY_PATH=""   &&   ./my_binary -f $foo
 disp('done with external program!')
2 голосов
/ 07 августа 2013

Я решил эту проблему, заменив версию libstdc ++. So.6 более новой версией из моей системы (я использую ubuntu 12.04).

Сначала найдите системную версию libstdc ++. So.6.

Из командной строки введите:

locate libstdc++.so.6

Моя системная версия libstdc была

/ USR / Lib / i386-Linux-гну / 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
2 голосов
/ 21 апреля 2011

Grr, community = fail.

Диагностика: сделайте! Gnome-терминал изнутри matlab и посмотрите на «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-терминала, запустите его из Matlab с помощью:

!./hack.sh  RunStuffThatLinksElsewhere

где hack.sh - это скрипт с чем-то вроде:

#!/bin/bash
source ~/.bashrc
export LD_LIBRARY_PATH=''
gnome-terminal --command="${1}"

так что простой тест состоит в том, чтобы попробовать его с "eog", этот хак обходит проблему со связью и позволяет запускать ее из Matlab ...

1 голос
/ 09 января 2014

Я недавно столкнулся с той же проблемой.Мое решение также использует скрипт poltergeist, как и другие ответы.Сценарий выглядит следующим образом (poltergeist.sh):

#!/bin/bash
export LD_LIBRARY_PATH=''
eval "$@"

Он в основном сбрасывает путь к библиотеке и впоследствии оценивает вызов, данный аргументами сценария.Затем из matlab я вызываю следующим образом:

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

Преимущество этого подхода заключается в том, что вы можете динамически изменять команду вызова в пределах matlab.Насколько я знаю, это невозможно при использовании синтаксиса bang в текущих предоставленных ответах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...