Makefile для C ++ / MATLAB Engine API

Если я правильно понимаю, идея 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) Итак, мой второй вопрос: что я могу сделать, чтобы решить эту проблему, или есть простой способ запустить этот пример?

Вот скриншот вывода терминала:
Терминал вывода, отсутствует ссылка в ссылках

0

Решение

Я полагаю, что это был вопрос версий в обоих случаях. Я переустанавливал и (почти) все работало.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]