qt c++ 調(diào)用matlab生成的dll

參考: https://ww2.mathworks.cn/help/compiler_sdk/gs/create-a-cc-matlab-data-application.html

https://ww2.mathworks.cn/help/compiler_sdk/cxx_mwArray_API_shared_library.html

https://ww2.mathworks.cn/support/search.html/answers/549564-how-do-i-build-a-driver-application-for-a-c-matlab-data-api-shared-library-using-microsoft-visual.html?fq[]=asset_type_name:answer&fq[]=category:compiler_sdk/cxx_MATLAB_Data_API_shared_library&page=1

https://ww2.mathworks.cn/help/compiler_sdk/cxx_MATLAB_Data_API_shared_library.html?s_tid=CRUX_lftnav

https://ww2.mathworks.cn/help/compiler_sdk/gs/create-a-cc-mwarray-application.html

環(huán)境:?win10、matlab2020a、qtcreater5.12.10(mingw64)

1.mex -setup,return

no compile(提示沒有編譯器)

2.

3

4選擇安裝

5編寫腳本myFunc.m

function [C]=myFunc(A,B)

C=A+B;

end

6

7輸入libraryCompiler


8使用生成的 for_redistribution_files_only?instructions(目錄中的)myFunc.dll、myFunc.h、myFunc.lib

9在pro文件中添加

INCLUDEPATH += $$PWD/include

LIBS += -L$$PWD/include/ -lmyFunc


INCLUDEPATH += ../../matlab2020a/extern/include

INCLUDEPATH += ../../matlab2020a/extern/include/win64

# 用到的MATLAB 的.lib庫(kù)文件

INCLUDEPATH += ../../matlab2020a/extern/lib/win64/mingw64

DEPENDPATH += ../../matlab2020a/extern/lib/win64/mingw64


LIBS+= -L../../matlab2020a/extern/lib/win64/mingw64 -llibmex

LIBS+= -L../../matlab2020a/extern/lib/win64/mingw64 -llibmx

LIBS+= -L../../matlab2020a/extern/lib/win64/mingw64 -llibmat

LIBS+= -L../../matlab2020a/extern/lib/win64/mingw64 -llibeng

LIBS+= -L../../matlab2020a/extern/lib/win64/mingw64 -lmclmcr

LIBS+= -L../../matlab2020a/extern/lib/win64/mingw64 -lmclmcrrt

10Cpp文件中


11編譯 沒有問題?運(yùn)行提示

`../../matlab2020a\bin\win64\icudt64.dll':Shared library architecture i386 is not compatible with target architecturei386:x86-64.

SetThrowSegvLongjmpSEHFilter(): filterfunction ../../matlab2020aed

12運(yùn)行myFuncInitialize 崩潰

13解決方法把mclInitializeApplication(NULL,0) 替換成

const char *args[] = {"-nojvm"};

const int count = sizeof(args) / sizeof(args[0]);

mclInitializeApplication(args, count);


注意最后需要 不需要用 matlab生成庫(kù)后需要添加

mclTerminateApplication();?//不添加程序不能正常退出

xxTerminate();//xx位庫(kù)的名稱

本人電腦 編譯matlab導(dǎo)出的mingw和msvc的c++動(dòng)態(tài)庫(kù)都可以。 但是本人matlab 不能導(dǎo)出 msvc編譯器的c++動(dòng)她庫(kù)(可能是因?yàn)槲业膙s重新裝過)

這里有一個(gè)大坑 就是這樣調(diào)用了之后, 打開mysql 數(shù)據(jù)庫(kù)失敗

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容