2016-02-17 3 views
0

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

Вот скриншот вывода терминала: Terminal output, missing link in references

ответ

0

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

Смежные вопросы