您的位置:首页 > 编程语言 > MATLAB

关于matlab与VS混合编程——在matlab中调试程序

2018-02-27 12:31 495 查看
win7 64位
matlab:R2014a
vs: Visual Studio 2017 Community (installed with the VC++ 2015 vc140 toolset)
(http://blog.csdn.net/guoxinian/article/details/50858523)matlab调用C++ 貌似有 利用MEX技术和调用C/C++动态连接库。这里使用MEX技术, mex接口函数的编写(在VS中编写)可参照: http://blog.csdn.net/yimiyangguang185/article/details/52623075http://blog.csdn.net/u010555688/article/details/37659285
写好mex接口函数后(我的是LocalExpansionStereoMex.cpp),需要在matlab中编写文件 然后运行编译生成.mexw64(64位)文件,同时
http://blog.csdn.net/jpday/article/details/50364882)注意:使用mex编译生成的时候一定要使用mex -g,否则调试的时候不会跳入vs中执行相关跟踪操作。也就是说如果你要在matlab中调试混合编程,那么除了.mexw64还必须生成.mexw64.pdb文件 见代码中标注。下面的代码是在别人写的基础上改动的% http://www.cnblogs.com/lukylu/p/3966871.html % This cppmake.m is for MATLAB
% Function: compile c++ files which rely on OpenCV for Matlab using mex
% Modified by Jessica
% Date : 2014-9-10
% HomePage: http://www.cnblogs.com/lukylu/ % Email : wanglu@innomotion.biz

% Matlab and C++ mixed programming(dependent on opencv library)
% First step(before exeuting this program): use "mex -setup" to choose your c/c++ compiler
clear all; close all; clc

% Get the architecture of this computer
is_64bit = strcmp(computer,'MACI64') || strcmp(computer,'GLNXA64') || strcmp(computer,'PCWIN64');

%----------------------------------------------------------------------------------------------
%% The configuration of compiler
% You need to modify this configuration according to your own path of OpenCV
% Notice: if your system is 64bit, your OpenCV must be 64bit!
out_dir = './build/';
CPPFLAGS = ' -O -DNDEBUG -I.\ -I.\opencv-3.1.0\include -I.\opencv-3.1.0\include\opencv -I.\opencv-3.1.0\include\opencv2'; % your OpenCV "include" path
LDFLAGS = ' -L.\opencv-3.1.0\lib -L.\maxflowlib'; % your OpenCV "lib" path
LIBS = ' -lmaxflow -lopencv_aruco310d -lopencv_bgsegm310d -lopencv_calib3d310d -lopencv_ccalib310d -lopencv_core310d -lopencv_datasets310d -lopencv_dnn310d -lopencv_dpm310d -lopencv_face310d -lopencv_features2d310d -lopencv_flann310d -lopencv_fuzzy310d -lopencv_highgui310d -lopencv_imgcodecs310d -lopencv_imgproc310d -lopencv_line_descriptor310d -lopencv_ml310d -lopencv_objdetect310d -lopencv_optflow310d -lopencv_photo310d -lopencv_plot310d -lopencv_reg310d -lopencv_rgbd310d -lopencv_saliency310d -lopencv_shape310d -lopencv_stereo310d -lopencv_stitching310d -lopencv_structured_light310d -lopencv_superres310d -lopencv_surface_matching310d -lopencv_text310d -lopencv_tracking310d -lopencv_ts310d -lopencv_video310d -lopencv_videoio310d -lopencv_videostab310d -lopencv_xfeatures2d310d -lopencv_ximgproc310d -lopencv_xobjdetect310d -lopencv_xphoto310d';
%LIBS = ' -lopencv_aruco310 -lopencv_bgsegm310 -lopencv_calib3d310 -lopencv_ccalib310 -lopencv_core310 -lopencv_datasets310 -lopencv_dnn310 -lopencv_dpm310 -lopencv_face310 -lopencv_features2d310 -lopencv_flann310 -lopencv_fuzzy310 -lopencv_highgui310 -lopencv_imgcodecs310 -lopencv_imgproc310 -lopencv_line_descriptor310 -lopencv_ml310 -lopencv_objdetect310 -lopencv_optflow310 -lopencv_photo310 -lopencv_plot310 -lopencv_reg310 -lopencv_rgbd310 -lopencv_saliency310 -lopencv_shape310 -lopencv_stereo310 -lopencv_stitching310 -lopencv_structured_light310 -lopencv_superres310 -lopencv_surface_matching310 -lopencv_text310 -lopencv_tracking310 -lopencv_ts310 -lopencv_video310 -lopencv_videoio310 -lopencv_videostab310 -lopencv_xfeatures2d310 -lopencv_ximgproc310 -lopencv_xobjdetect310 -lopencv_xphoto310';
debug_flag = 1;
if debug_flag
CPPFLAGS = [CPPFLAGS ' -g'];%生成.mexw64.pdb文件 调试用
end
if is_64bit
CPPFLAGS = [CPPFLAGS ' -largeArrayDims'];
end

% add your files here!!
compile_files = {
%the list of your code files which need to be compiled
'LocalExpansionStereoMex.cpp'
};
%----------------------------------------------------------------------------------------------

%----------------------------------------------------------------------------------------------
%% compiling
for k = 1 : length(compile_files)
str = compile_files{k};
fprintf('compilation of: %s\n', str);
str = [str ' -outdir ' out_dir CPPFLAGS LDFLAGS LIBS];
args = regexp(str, '\s+', 'split');
mex(args{:});
end
fprintf('Congratulations, compilation successful!!!\n');
%----------------------------------------------------------------------------------------------

http://blog.csdn.net/jacke121/article/details/56045242中指出“-O3, -DNDEBUG 这两个参数优化选项,可以提高编译出来的程序运行速度” 在运行此matlab文件前需要按照 http://blog.csdn.net/wind_liang/article/details/51402224
中先在命令行窗口中执行 mex - setup和mbuild -setup
最后按照 http://blog.csdn.net/ayw_hehe/article/details/6790147中
“不要关闭matlab, 打开vs       选tools->attach to process...       在跳出来的对话框中选择matlab       然后file->open自己的xxx.c,设置断点       而后直接在matlab中调用刚编译过的程序,搞定

开始调试。注意:此处打开VS的时候重新打开一个,不要在别的项目中直接打开。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: