Вызов matlab из C ++ - PullRequest
       13

Вызов matlab из C ++

6 голосов
/ 13 октября 2011

Я пытался вызвать matlab из файла .cpp.Я использовал следующую команду для компиляции engdemo.cpp, которая включает "engine.h"

g++ engdemo.cpp -I/usr/local/matlabR2010a/extern/include -L/usr/local/matlabR2010a/extern/lib -o engdemo

Что я получил, это:

engdemo.cpp:(.text+0xdb): undefined reference to `engOpen'
engdemo.cpp:(.text+0x12d): undefined reference to `mxCreateDoubleMatrix'
engdemo.cpp:(.text+0x143): undefined reference to `mxGetPr'
engdemo.cpp:(.text+0x175): undefined reference to `engPutVariable'
engdemo.cpp:(.text+0x189): undefined reference to `engEvalString'

...

collect2: ld вернул 1 состояние выхода


Я думаю, это может быть проблема со связью, но я не уверен.Пожалуйста, помогите мне.Большое спасибо заранее!

Ответы [ 4 ]

2 голосов
/ 13 октября 2011

После того, что @Kurt S сказал , вам нужно будет включить библиотеки.Это обычные, которые вам понадобятся: libeng.lib libmat.lib libmx.lib, но вам могут потребоваться другие.

Таким образом, вы хотите добавить опции связывания -llibeng -llibmat -llibmx

Но вывозможно, понадобятся и другие.

2 голосов
/ 14 октября 2011

Вот простой make-файл, который поможет вам начать:

Makefile

# root directory of MATLAB installation
MATLABROOT="/usr/local/matlabR2010a"

all: engdemo

engdemo:
    g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
        -I${MATLABROOT}/extern/include \
        -L${MATLABROOT}/extern/lib -llibeng -llibmx

clean:
    rm -f engdemo *.o

Просто используйте его, позвонив make, а затем запустите программу как ./engdemo


Вы также можете скомпилировать это прямо из MATLAB.Сначала убедитесь, что вы выполнили команду mbuild -setup хотя бы один раз:

>> srcFile = fullfile(matlabroot,'extern','examples','eng_mat','engdemo.cpp');
>> mbuild(srcFile, '-llibeng','-llibmx')
>> !engdemo
1 голос
/ 19 января 2013

Проблема заключается в неправильной спецификации включаемых файлов и папок (т.е. для библиотек и файлов ссылок) и нескольких дополнительных зависимостей.

Вы можете использовать простой демонстрационный код для сопряжения C / C ++ и MATLABздесь дано , чтобы понять, что нужно сделать.

Также вам нужно использовать файл CMAKELISTS.TXT с подходящими настройками для MATLAB, для которого доступно хорошее руководство здесь .

0 голосов
/ 13 октября 2011

Вы должны указать, с какими библиотеками ссылаться с помощью опции -l для g ++.Исходя из вашей строки ссылки, библиотека должна быть в / usr / local / matlabR2010a / extern / lib .Например, если нужная вам библиотека называется libmatlab.a , вам нужно добавить опцию -lmatlab в командную строку.

...