Если я правильно понимаю, идея API заключается в том, чтобы иметь возможность передавать некоторые данные из C ++ и MATLAB (при условии, что среда MATLAB запущена и работает на компьютере), чтобы получить лучшее из обоих миров.
Конкретно то, что я пытаюсь сделать, это использовать API в коде моделирования, чтобы не приходилось открывать MATLAB вручную каждый раз, когда я хочу получить графики из моей программы на C ++. Я понимаю, что есть и другие варианты, такие как компиляция напрямую с использованием mex в MATLAB (что я не смог сделать, потому что, когда я выполняю скомпилированный файл, он не может правильно загрузить разделяемые библиотеки)
Для начала я пытался выполнить пример (engdemo.cpp), предоставленный MATLAB.
Я попытался обновить мой make-файл, включив в него библиотеки и ссылки на необходимые заголовочные файлы:
MATLABROOT = /…/matlab/r2012b
CFLAGS = -I $ {MATLABROOT} / extern
LIBS = -L $ {MATLABROOT} / bin / glnxa64
Тогда g ++ $ (CFLAGS) $ (LIBS) -leng -lmx demo.cpp -o демо
Но я получаю кучу предупреждений о том, что libeng и libmx не могут найти другие файлы * .so.
Когда я вручную проверил папку, содержащую * .so (а именно … / bin / glnxa64), я понял, что они называются не -leng и -lmx, а libeng и libmx.
1) Итак, прежде всего я хотел бы знать, почему я должен называть их по-другому?
Предупреждающие сообщения советовали мне использовать -RPATH или же -RPATH-ссылка вариант, который я догадался, был какой-то рекурсией, которую я не понимаю, потому что все * .so находятся в одной папке. Я все еще пытался, и это не работало, потому что выбор не был бы признан. Поэтому я попытался вручную запросить выполнение других * .so, и это работало для некоторых из них, но не для всех, и я до сих пор не понял, почему их следует называть -l *** insted of -lib * **.
2) Итак, мой второй вопрос: что я могу сделать, чтобы решить эту проблему, или есть простой способ запустить этот пример?
Я полагаю, что это был вопрос версий в обоих случаях. Я переустанавливал и (почти) все работало.
Других решений пока нет …