Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Matlab Engine Application with Qt

Matlab Engine Application with Qt

Scheduled Pinned Locked Moved Unsolved General and Desktop
5 Posts 4 Posters 3.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    stevosteve
    wrote on 19 Jan 2018, 16:42 last edited by
    #1

    Hello everyone,

    I am trying to create a Qt application that uses the Matlab engine to perform calculations and execute scripts.
    My build system has the following parameters that I think are relevant :

    Matlab 2017a
    Ubuntu 16.04
    gcc 5.4.0
    Qt5.10.0

    The application I am currently trying to compile is very simple

    #include <QcoreApplication>
    #include <QDebug>
    #include "engine.h"
    #include "matrix.h"
    
    int main(int argc, char *argv[])
    {
        Engine* m_engine;
    
        m_engine = engOpen("");
    
        if (!(m_engine = engOpen(""))) {
            qDebug()<<"\nCan't start MATLAB engine\n";
            exit(-1);
        }
    }
    

    The pro file I am using is the following :

    QT -= gui
    
    CONFIG += c++11
    CONFIG -= app_bundle
    
    
    MATLAB_ROOT_PATH = /usr/local/MATLAB/R2017a
    
    MATLAB_INCLUDE_PATH = $${MATLAB_ROOT_PATH}/extern/include
    MATLAB_LIB_PATH     = $${MATLAB_ROOT_PATH}/bin/glnxa64
    MATLAB_SYS_DIR = $${MATLAB_ROOT_PATH}/sys/os/glnxa64
    
    LIBS += -L$${MATLAB_LIB_PATH} -lmx -lmex -lmat -lm -leng
    LIBS += -L$${MATLAB_SYS_DIR} -lstdc++
    
    INCLUDEPATH += $$MATLAB_INCLUDE_PATH
    DEPENDPATH  += $$MATLAB_INCLUDE_PATH
    
    QMAKE_RPATHDIR += $$MATLAB_LIB_PATH
    QMAKE_RPATHDIR += $$MATLAB_SYS_DIR
    
    DEFINES += QT_DEPRECATED_WARNINGS
    SOURCES += main.cpp
    

    The above code compiles, but I get the following error during execution from both the Qt Creator and the system console :

    ./matlab_test: /usr/local/MATLAB/R2017a/bin/glnxa64/libQt5Core.so.5: no version information available (required by ./matlab_test)
    ./matlab_test: /usr/local/MATLAB/R2017a/bin/glnxa64/libQt5Core.so.5: no version information available (required by ./matlab_test)
    ./matlab_test: relocation error: ./matlab_test: symbol qt_version_tag, version Qt_5.10 not defined in file libQt5Core.so.5 with link time reference
    

    I have looked into this problem for a while now and problem was that I received runtime error regarding the stdc++ library which was not the same as the compilers.

    Replacing the linking to the stdc++ library with the following

    LIBS += -L/usr/lib/x86_64-linux-gnu -lstdc++
    

    results in the following compilation error :

    g++ -c -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_CORE_LIB -I../matlab_test -I. -I/usr/local/MATLAB/R2017a/extern/include -I../../../../Qt/5.10.0/gcc_64/include -I../../../../Qt/5.10.0/gcc_64/include/QtCore -I. -I../../../../Qt/5.10.0/gcc_64/mkspecs/linux-g++ -o main.o 
    g++ -Wl,-O1 -Wl,-rpath,/home/stef/Qt/5.10.0/gcc_64/lib -Wl,-rpath,/usr/lib/x86_64-linux-gnu -Wl,-rpath,/usr/local/MATLAB/R2017a/bin/glnxa64 -Wl,-rpath,/usr/local/MATLAB/R2017a/sys/os/glnxa64 -Wl,-rpath,/home/stef/Qt/5.10.0/gcc_64/lib -o matlab_test main.o   -L/usr/local/MATLAB/R2017a/bin/glnxa64 -lmx -lmex -lmat -lm -leng -L/usr/lib/x86_64-linux-gnu -lstdc++ -L/home/stef/Qt/5.10.0/gcc_64/lib -lQt5Core -lpthread 
    /usr/local/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `icu_56::UnicodeString::UnicodeString(char16_t const*, int)'
    /usr/local/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `UCNV_FROM_U_CALLBACK_ESCAPE_WITH_INVISIBLE_CHARS_56'
    /usr/local/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `UCNV_FROM_U_CALLBACK_STOP_WITH_INVISIBLE_CHARS_56'
    /usr/local/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `icu_56::UnicodeString::UnicodeString(char16_t const*)'
    /usr/local/MATLAB/R2017a/bin/glnxa64/libmwi18n.so: undefined reference to `icu_56::UnicodeString::doCompare(int, int, char16_t const*, int, int) const'
    Makefile:244: recipe for target 'matlab_test' failed
    collect2: error: ld returned 1 exit status
    make: *** [matlab_test] Error 1
    16:18:26: The process "/usr/bin/make" exited with code 2.
    Error while building/deploying project matlab_test (kit: Desktop Qt 5.10.0 GCC 64bit)
    When executing step "Make"
    

    Mathworks states that they officially support gcc 4.9, but I think this is true when compiling from MATLAB directly. I have also tried compiling by linking the libraries in the Matlab folder to the system ones instead, but I get similar errors.

    Anyone have any idea? Do you think it is a compiler issue? Do you think it could be solved by compiling Qt with gcc 4.9 and then trying again? Am I not linking the libraries correctly in the qmake .pro file?

    Thank you for your time

    PS : The ldd command on the executable when I can get it to compile gives me the following

    linux-vdso.so.1 =>  (0x00007ffc42980000)
    libeng.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libeng.so (0x00007f992c48b000)
    libstdc++.so.6 => /usr/local/MATLAB/R2017a/sys/os/glnxa64/libstdc++.so.6 (0x00007f992c178000)
    libQt5Core.so.5 => /usr/local/MATLAB/R2017a/bin/glnxa64/libQt5Core.so.5 (0x00007f992ba41000)
    libgcc_s.so.1 => /usr/local/MATLAB/R2017a/sys/os/glnxa64/libgcc_s.so.1 (0x00007f992b82b000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f992b449000)
    libut.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libut.so (0x00007f992b165000)
    libmx.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libmx.so (0x00007f992add3000)
    libmat.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libmat.so (0x00007f992ab78000)
    libboost_system.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_system.so.1.56.0 (0x00007f992a975000)
    libmwcpp11compat.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libmwcpp11compat.so (0x00007f992a757000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f992a44d000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f992a230000)
    /lib64/ld-linux-x86-64.so.2 (0x000055e67200a000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f992a016000)
    libicui18n.so.56 => /usr/local/MATLAB/R2017a/bin/glnxa64/libicui18n.so.56 (0x00007f9929b8e000)
    libicuuc.so.56 => /usr/local/MATLAB/R2017a/bin/glnxa64/libicuuc.so.56 (0x00007f99297f1000)
    libicudata.so.56 => /usr/local/MATLAB/R2017a/bin/glnxa64/libicudata.so.56 (0x00007f9927e0b000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9927c06000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f99279fe000)
    libmwi18n.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libmwi18n.so (0x00007f99276ac000)
    libmwfl.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libmwfl.so (0x00007f99272f9000)
    libmwresource_core.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libmwresource_core.so (0x00007f99270f7000)
    libmwfoundation_usm.so => /usr/local/MATLAB/R2017a/bin/glnxa64/libmwfoundation_usm.so (0x00007f9926ed6000)
    libboost_chrono.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_chrono.so.1.56.0 (0x00007f9926ccf000)
    libboost_date_time.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_date_time.so.1.56.0 (0x00007f9926abe000)
    libboost_filesystem.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_filesystem.so.1.56.0 (0x00007f99268a8000)
    libboost_log.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_log.so.1.56.0 (0x00007f99265ca000)
    libboost_regex.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_regex.so.1.56.0 (0x00007f99262ba000)
    libboost_thread.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_thread.so.1.56.0 (0x00007f9926099000)
    libexpat.so.1 => /usr/local/MATLAB/R2017a/bin/glnxa64/libexpat.so.1 (0x00007f9925e70000)
    libicuio.so.56 => /usr/local/MATLAB/R2017a/bin/glnxa64/libicuio.so.56 (0x00007f9925c63000)
    libtbb.so.2 => /usr/local/MATLAB/R2017a/bin/glnxa64/libtbb.so.2 (0x00007f9925a18000)
    libtbbmalloc.so.2 => /usr/local/MATLAB/R2017a/bin/glnxa64/libtbbmalloc.so.2 (0x00007f99257c5000)
    libboost_signals.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_signals.so.1.56.0 (0x00007f99255af000)
    libhdf5_hl.so.8 => /usr/local/MATLAB/R2017a/bin/glnxa64/libhdf5_hl.so.8 (0x00007f992537e000)
    libhdf5.so.8 => /usr/local/MATLAB/R2017a/bin/glnxa64/libhdf5.so.8 (0x00007f9924eed000)
    libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1 (0x00007f9924cb4000)
    libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007f9924aa6000)
    libboost_serialization.so.1.56.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libboost_serialization.so.1.56.0 (0x00007f9924846000)
    libunwind.so.8 => /usr/local/MATLAB/R2017a/bin/glnxa64/libunwind.so.8 (0x00007f9924626000)
    libssl.so.1.0.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libssl.so.1.0.0 (0x00007f99243b5000)
    libcrypto.so.1.0.0 => /usr/local/MATLAB/R2017a/bin/glnxa64/libcrypto.so.1.0.0 (0x00007f9923f6e000)
    libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007f9923d46000)
    
    1 Reply Last reply
    0
    • S Offline
      S Offline
      shwoods
      wrote on 24 Jan 2018, 15:15 last edited by
      #2

      According to Mathworks "Build C++ Engine Programs" the following libraries should be used in Linux:

      Linux Libraries
      Engine library — matlabroot/extern/bin/glnxa64/libMatlabEngine.so
      MATLAB Data Array library — matlabroot/extern/bin/glnxa64/libMatlabDataArray.so
      Additional library — pthread

      Could it be in your pro file you need to add extern to this path?

      MATLAB_LIB_PATH = $${MATLAB_ROOT_PATH}/bin/glnxa64

      1 Reply Last reply
      0
      • S Offline
        S Offline
        stevosteve
        wrote on 1 Feb 2018, 09:59 last edited by
        #3

        @shwoods said in Matlab Engine Application with Qt:

        libMatlabEngine

        These libraries were included with MATLAB 2017b. The previous MATLAB versions use the engine.h and matrix.h.

        I have been in contact with mathworks and as a first step towards solving the problem was to use Qt 5.5 while linking to the libstdc++.so located in the $$MATLAB_SYS_DIR. The problem then is that matlab engine does not start.

        I will update you if I find more

        mrjjM 1 Reply Last reply 1 Feb 2018, 15:21
        0
        • S stevosteve
          1 Feb 2018, 09:59

          @shwoods said in Matlab Engine Application with Qt:

          libMatlabEngine

          These libraries were included with MATLAB 2017b. The previous MATLAB versions use the engine.h and matrix.h.

          I have been in contact with mathworks and as a first step towards solving the problem was to use Qt 5.5 while linking to the libstdc++.so located in the $$MATLAB_SYS_DIR. The problem then is that matlab engine does not start.

          I will update you if I find more

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on 1 Feb 2018, 15:21 last edited by
          #4

          @stevosteve
          Hi
          You must likely have checked that but just in case.
          Did you try LDD on libMatlabEngine to see if anything missing ?

          1 Reply Last reply
          1
          • S Offline
            S Offline
            Sussi
            wrote on 17 Oct 2018, 22:12 last edited by
            #5

            Hi stevosteve,

            Just wondering if your problem solved? I am quite new to Qt and trying to call some Matlab functions, while I think I have the same issue as yours, do you have any idea where it went wrong?

            Thank you very much,

            Sussi

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved