Important: Please read the Qt Code of Conduct -

Configure matlab engine in qtcreator

  • Dear all,

    I'm facing a problem trying to realize a software in qt that can call matlab function and scripts. But so far I'm miserably failing at setting up my code with matlab libraries and header.
    In order to work I need to include 2 header : engine.h and matrix.h
    and 2 library : libmx.lib and libeng.lib
    so here is my .pro

    QT += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    TARGET = testMatlabEngine
    TEMPLATE = app
    SOURCES += main.cpp \
    HEADERS  += mainwindow.h \
                engine.h \
    DISTFILES += \
    win32:LIBS += -Lc:\matlab\r2017a\extern\lib\win64\microsoft -leng
                  -LC:\MATLAB\R2017a\extern\lib\win64\microsoft -lmx
    INCLUDEPATH += "c:/matlab/r2017b/extern/include"

    and so far even if the autocompletion of qtCreator recognize matlab function such as "engEvalString" I get the folowing warnings :
    warning: Failure to find: engine.h
    warning: Failure to find: matrix.h
    and the following error
    error: cannot find -leng

    any idea on how to make it work, I'm running out of idea

    edit : I forgot to mention that I'm using window 7

  • Hi @Zhitoune
    You are at least missing the \ in the line ends of win32:libs and includepath.
    And windows paths need to be in "" so

    win32:LIBS += -L"c:\matlab\r2017a\extern\lib\win64\microsoft" -leng \
                  -L"c:\MATLAB\R2017a\extern\lib\win64\microsoft" -lmx


    INCLUDEPATH += "c:/matlab/r2017b/extern/include" \

  • Thanks @tekojo

    unfortunatly, it still does not compile...
    I have tried many variations like removing upper case etc etc but so far with no results

  • So using :

    LIBS += "C:\MATLAB\R2017b\extern\lib\win64\mingw64\libeng.lib" \

    I somewhtat manage to go to :

    error: undefined reference to `engOpen'

    (engOpen being a fonction of matlab engine.h ) wich I interpret as : " the headers are fine but it' s a reference to an unknown library".
    I checked and I use MinGW 5.3 wich is compatible with my version of matlab

  • Lifetime Qt Champion


    Aren't you mixing 32 and 64 bit MinGW ?

    By the you should rather use forward slashes everywhere. Qt handles the conversion for you. Otherwise use double backslashes.

  • Thanks for you help!
    that's what I'm trying to determine. I'll post when I know more

  • So I checked and it seem that the matlab libraries were compiled using minGW-w64 while I'm using minGW 5.3 32 bit. Can the errors I obtain be the results of this imcompatibility?
    So I configured a new kit with MSVC2015 64bit compiler but I get the following error :

    mainwindow.obj:-1: error: LNK2019: unresolved external symbol engOpen referenced in function "public: __cdecl MainWindow::MainWindow(class QWidget *)" (??0MainWindow@@QEAA@PEAVQWidget@@@Z)

  • Lifetime Qt Champion

    Make sure to completely wipe the build folder and
    run qmake and rebuild all.

  • thanks for your help,

    I always use rebuild. should I clean and rebuild?

  • Lifetime Qt Champion

    well to be 100% sure, please delete the build folder. ( in this case)
    This is normally not needed but if anything remains from the minGw compile and u now are using visual studio then odd errors will pop up.
    ( the .o files should in other folder, but better sure than sorry)

    Often rebuild is enough but sometimes full deletion is needed.
    Sorry, i misread.
    it complains about engOpen
    which i assume is from the MATLAB lib

  • yes it is!

  • Lifetime Qt Champion

    And the MATLAB r2017b libraries are compiled with 2015/2017 64 bit ?

    Higher up you show

    but maybe it also contains libs for visual studio in other folder than mingw64 ?

    Ah yes, seems to be in

    So those are 2015/2015 compiled?

    You cannot fix DLLS from other compilers. It must be same compiler for App and
    matlab libs.

    So mingw32 wont load 64 bit mingw.

    but so we are clear.

    You are now using
    MSVC2015 compiler (installed by your self)
    Qt 2015 version kit
    and points to
    win32:LIBS += -L"c:\matlab\r2017a\extern\lib\win64\microsoft" -leng
    -L"c:\MATLAB\R2017a\extern\lib\win64\microsoft" -lmx

    from .pro file?

  • So it's finaly working with a kit made of :
    Desktop Qt 5.9.2
    MSVC2015 64bit

    and my .pro file looks like this :

    QT += core gui
    greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
    TARGET = testMatlabEngine
    TEMPLATE = app
    CONFIG += create_prl
    CONFIG += link_prl
    SOURCES += main.cpp \
    HEADERS  += mainwindow.h \
    DISTFILES += \
    LIBS += -L"C:/MATLAB/R2017b/extern/lib/win64/microsoft/" -llibeng \
            -L"C:/MATLAB/R2017b/extern/lib/win64/microsoft/" -llibmx
    INCLUDEPATH += C:/MATLAB/R2017b/extern/include

    Thank you very for your help!!!!

  • I also unchecked the "shadow build" in the built settings. it started getting better after that.

Log in to reply