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