MinGW-W64编译MatLab包装DLL遇WinMain未定义及mt命令缺失问题
问题描述
我尝试将MatLab脚本生成DLL,并制作适配LabView调用的包装DLL,过程中遇到两个编译错误:
- MatLab脚本生成DLL的过程顺利,得到了
.dll、.h、.lib、.def等文件; - 编写包装DLL代码后,使用以下
mbuild命令编译:
mbuild -v A0007121_3LIV_W.c A0007121_3LIV.lib LINKFLAGS="$LINKFLAGS /DLL /DEF:A0007121_3LIV_W.def" LDEXT=".dll" CMDLINE250="mt -outputresource:$EXE';'2 -manifest $MANIFEST"
编译时MinGW-W64报错:undefined reference to WinMain;
- 在包装C代码中添加空
main函数后,WinMain错误解决,但出现新错误:'mt' is not recognized as an internal or external command, operable program or batch file.
使用环境:MatLab 2019b、MinGW-W64 6.3.0
相关代码
MatLab脚本源码
function [SNR_dB, PhaseNoise_mean] = Misura_SNR_con_SBX(FullName, Figure_path) ... end
包装头文件
#ifndef A0007121_3LIV_W #define A0007121_3LIV_W void loadA0007121_3LIV(void); void unloadA0007121_3LIV(void); int wmlfMisura_SNR_con_SBX(char* FullName, char* FigurePath, double* SNR_dB, double* PhaseNoise_mean); #endif
包装代码
#include "A0007121_3LIV_W.h" #include "A0007121_3LIV.h" #include "matrix.h" void loadA0007121_3LIV(void) { A0007121_3LIVInitialize(); } void unloadA0007121_3LIV(void) { A0007121_3LIVTerminate(); } int wmlfMisura_SNR_con_SBX(char* FullName, char* FigurePath, double* SNR_dB, double* PhaseNoise_mean) { int result = 1; mxArray* mFullName = mxCreateString(FullName); mxArray* mFigure_path = mxCreateString(FigurePath); int nargout = 2; mxArray* mSNR_dB = NULL; mxArray* mPhaseNoise_mean = NULL; //int nargout, mxArray** SNR_dB, mxArray** PhaseNoise_mean, mxArray* FullName, mxArray* Figure_path result = mlfMisura_SNR_con_SBX( nargout, &mSNR_dB, &mPhaseNoise_mean, mFullName, mFigure_path); //TODO: outputs ? memcpy(SNR_dB, mxGetPr(mSNR_dB), sizeof(double)); memcpy(PhaseNoise_mean, mxGetPr(mPhaseNoise_mean), sizeof(double)); mxDestroyArray(mFullName); mxDestroyArray(mFigure_path); mxDestroyArray(mSNR_dB); mxDestroyArray(mPhaseNoise_mean); return result; }
包装.def文件
LIBRARY A0007121_3LIV_W EXPORTS loadA0007121_3LIV unloadA0007121_3LIV wmlfMisura_SNR_con_SBX
内容的提问来源于stack exchange,提问作者weirdgyn
相关产品推荐
相关产品推荐

