话说Matlab和VS的联合编译真的让人头大…
顺带提一句,此方法VS任何版本都适用,或者说是:cpp文件编译为mexw64文件是不用关心VS和Matlab版本号的,毕竟cpp可以理解为只是一个文本文件···
文章目录
1.简介
主要是别人提供的是一个cpp文件,然后最后要用Matlab编译,其中cpp文件使用到了opencv版本是2.4.9,我这里找到的2.4.9的最高只支持到VS2013,所以这次就是用的VS2013来配的。其他版本操作和本例是一样的。
博主本文的编译环境:VS2013、Matlab R2015b、Opencv2.4.9
2.配置VS属性表
是的…第一步还是配置属性表…(我这里就默认你们已经有要编译的cpp文件了)
2.1 新建工程
新建一个空项目
这里应用程序类型选择DLL,忘了选的话后面也可以选。
2.2 添加相关文件
添加头文件test.h和源文件test.cpp,建议就用这两个名字,因为后面要用。
然后在新建一个test.def文件,在这里:
重申:建议名字不要改
2.3 写入代码
2.3.1 test.h
test.h文件中写入:
#pragma once
#include "matrix.h"
#include "mex.h"
#define TESTMATLAB_EXPORTS
#ifdef TESTMATLAB_EXPORTS
#define MEX_FUNCTION_API __declspec(dllexport)
#else
#define MEX_FUNCTION_API __declspec(dllimport)
#endif
MEX_FUNCTION_API void mexFunction(int nlhs, mxArray* plhs[], int nrhs, mxArray* prhs[]);
2.3.2 test.cpp
test.cpp中粘贴进你自己的cpp的代码
//
假装有图
//
2.3.3 test.def
test.def中写入:
LIBRARY "testp"
EXPORTS
mexFunction
这个时候报错是正常,毕竟还没添加属性表…
2.4 配置属性表
2.4.1 选择编译平台
首先,将工程选择到X64(毕竟是生成mexw64文件,生成mexw32文件选择X86)
2.4.1 配置Matlab
老规矩,创建新的属性表:
然后双击打开。
添加包含目录:(注意自己的路径)
D:\P_Matlab\extern\include
添加库目录:(注意选择win64,X86的选择win32)
D:\P_Matlab\extern\lib\win64\microsoft
添加附加依耐项:注意看一下你的lib文件夹里面是否和我给的一样有的说只用加一两个就可以了,但是我之前报错了,所以索性就都加上,如果和我这个不一样的,参见我之前博客里面的附录2—获取自己的链接库列表传送门在此:链接: https://blog.csdn.net/weixin_41991128/article/details/83864713.
gpu.lib
libcovrt.lib
libemlrt.lib
libeng.lib
libfixedpoint.lib
libmat.lib
libmex.lib
libmwblas.lib
libmwblascompat32.lib
libmwboxfilter.lib
libmwboxfilter3.lib
libmwbwdistEDT.lib
libmwbwdistEDTFT.lib
libmwbwdistEDTFT_tbb.lib
libmwbwdistEDT_tbb.lib
libmwbwlookup.lib
libmwbwlookup_tbb.lib
libmwbwpackc.lib
libmwbwpackctbb.lib
libmwbwunpackc.lib
libmwbwunpackctbb.lib
libmwcannythresholding_tbb.lib
libmwcascadeClassifier.lib
libmwcgir_construct.lib
libmwcgxert.lib
libmwcoderassumptionsapp.lib
libmwcoderprofile.lib
libmwcoder_connectivity_comm.lib
libmwcoder_connectivity_memunit.lib
libmwcoder_ParamTuningTgtAppSvc.lib
libmwcoder_target_services.lib
libmwcoder_ToAsyncQueueTgtAppSvc.lib
libmwComputeMetric.lib
libmwddist.lib
libmwdetectBRISK.lib
libmwdetectFAST.lib
libmwdetectMser.lib
libmwdisparityBM.lib
libmwdisparitySGBM.lib
libmwedgethinning_tbb.lib
libmwextractBRISK.lib
libmwextractFreak.lib
libmwextractSurf.lib
libmwfastHessianDetector.lib
libmwfilcommon.lib
libmwforegroundDetector.lib
libmwgetnumcores.lib
libmwgrayto16.lib
libmwgrayto8.lib
libmwgrayxform.lib
libmwgrayxform_tbb.lib
libmwHOGDescriptor.lib
libmwimfilter.lib
libmwimlincomb.lib
libmwimlincomb_tbb.lib
libmwimreconstruct.lib
libmwimregionalmax.lib
libmwint16touint16.lib
libmwint32touint32.lib
libmwint8touint8.lib
libmwintlut.lib
libmwintluttbb.lib
libmwippfilter.lib
libmwippgeotrans.lib
libmwippmedianfilter.lib
libmwippreconstruct.lib
libmwlapack.lib
libmwmatchFeatures.lib
libmwmathutil.lib
libmwmorphop_binary.lib
libmwmorphop_binary_tbb.lib
libmwmorphop_flat.lib
libmwmorphop_flat_tbb.lib
libmwmorphop_ipp.lib
libmwmorphop_nonflat.lib
libmwmorphop_nonflat_tbb.lib
libmwmorphop_packed.lib
libmwocvgpumex.lib
libmwocvmex.lib
libmwopticalFlowFarneback.lib
libmwopticalFlowHSCore.lib
libmwopticalFlowLKCore.lib
libmwopticalFlowLKDoGCore.lib
libmwordfilt2.lib
libmwpointTracker.lib
libmwremap.lib
libmwremaptbb.lib
libmwrtiostreamutils.lib
libmwservices.lib
libmwsigstream.lib
libmwsimulink.lib
libmwslexec_parallel.lib
libmwslexec_simbridge.lib
libmwsl_AsyncioQueue.lib
libmwsl_fileio.lib
libmwsl_iofile.lib
libmwsl_log_load_blocks.lib
libmwsl_sfcn_cov_bridge.lib
libmwsl_solver_rtw.lib
libmwtbbhist.lib
libmwuint16toint16.lib
libmwxilcomms.lib
libmwxilcomms_rtiostream.lib
libmwxilservice.lib
libmwxilutils.lib
libmwxilutils_sl.lib
libmx.lib
libut.lib
mclbase.lib
mclcommain.lib
mclmcr.lib
mclmcrrt.lib
mclxlmain.lib
ne_mli.lib
ne_rtl.lib
ocrutils.lib
physmod_common_external_library_kernel.lib
physmod_common_foundation_core_util.lib
rtwcg.lib
sf_runtime.lib
SimulinkBlock.lib
sl_services.lib
2.5 *配置Opencv
注意:这里是我此次工程需要用到这个Opencv2.4.9,读者根据自己的需求配置自己.cpp中涉及使用到的包含项、库等即可,Opencv的配置详见:
链接:https://blog.csdn.net/weixin_41991128/article/details/83656543
2.6 确认相关设置
属性表配好之后还需要确定一下:
双击下图标注打开工程的属性表,检查配置类型是否为动态库
3.编译
点击生成解决方案
提示成功,然后到输出里给的路径找到刚刚生成的dll文件
然后直接重命名为你想要的名字,和mexw64后缀即为生成的mexw64文件了。