MATLAB2012b与vs2013混合编程连接问题

时间:2021-10-17 00:22:55

         首先,必须要强调的问题是,我本来以为这两者混合编程与双方的版本问题没有关系,虽然网上有很多网友都说和版本有关,但是我还是一头死心,想把MATLAB2012b与vs2013连接起来。尝试了千百种方法,出错误到头大。在别人的MATLAB2016a上运行mcc   mex等命令顺利得到我要配置的文件。因此,终于放弃挣扎,卸载了2012b安装了较新版本的MATLAB2016a。一下是具体过程:


          (1)第一次努力调试:整个系统的环境是w10,MATLAB2012b,vs2013

           step 1:这个时候就需要在MATLAB里面敲很多命令,包括没build -setup;mex -setup;两个命令。需要注意的是,这两个命令中“-”前面是有空格的。具体的我是参考是百度文库,白水米饭这位网友上传的文章的第一部分内容:

                   http://wenku.baidu.com/link?url=hug8CR9wprZ401u9TgTPXdBGG2sD8OAfS_tEVnDwTUzw4BUxJncW_p_34uoSnq8D-                      HonLddofmYVMc1ad9y4Sl6MQZs5YNLPGGbvJPHAsz3

          step 2:写m文件,实际上是一个简单的函数

                              function [c]=MyAdd(a,b)

                              %UNTITLED Summary of this function goes here

                              % Detailed explanation goes here


                                  c=a+b

                                  end

                             保存为MyAdd.m文件。

           step 3:在MATLAB中敲入 mcc -W cpplib:MyAdd -T link:lib -h libmmfile.mlib MyAdd.m      命令。

                          等待MATLAB反应,这需要一段时间。但实际上,我在MATLAB2012b中,走到这一步就完全卡死了,根本得不到我想要的xx.cpp   xx.dll   xx.def   xx.exp ……等                           等。因此挪步第二种环境情况。


          (2)第二次努力调试:整个系统的环境是w10,MATLAB2016a,vs2013

            step 1:卸载MATLAB2012b

            step 2:安装MATLAB2016a,需要该步骤中MATLAB2016a安装包的同志可以在下方评论区留言告知,我会将百度网盘整理分享出来。

            step 3:敲MATLAB命令

                           mcc -W cpplib:MyAdd -T link:lib -h libmmfile.mlib MyAdd.m 

                          等待反应然后

                           mex -setup

                          等待反应做相应选择。会出现如图所示的几个文件。还有相应的readme等txt文件等。

                                                                                                                      MATLAB2012b与vs2013混合编程连接问题

            step 4:配置系统环境。

                            第一,在搜索窗搜索“环境变量”----用户变量-----路径(path)------新建(添加MATLAB2016a软件安装目录):

                                      即就是添加这两个:从…到MATLAB/extern/lib/win64/microsoft;

                                                                          从…到MATLAB/bin/win64;

                           第二,在搜索窗搜索“环境变量”----系统变量-----路径(path)------新建(添加目录):

                                       即就是添加这两个:从…到MATLAB/runtime/win64;

                                                                           从…到MATLAB/bin/win64;

                                                                           从…到MATLAB/bin;

                                                                           从…到MATLAB/extern/lib/win64/microsoft;

          step 5:配置vs2013环境。

                       第一,创建一个控制平台程序,空项目,建一个cpp文件,写入测试程序:

                                            test.cpp : 定义控制台应用程序的入口点。




#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <iostream>
//#include "mclmcr.h"
//#include "matrix.h"
//#include "mclcppclass.h"
#include "MyAdd.h"


using namespace std;
#pragma comment(lib, "MyAdd.lib")


int main()
{
double a = 6;
double b = 9;
double c;
// initialize lib,这里必须做初始化!
if (!MyAddInitialize())
{
std::cout << "Could not initialize libMyAdd!" << std::endl;
return -1;
}
//mclmcrrt9_0_1.dll
// 为变量分配内存空间,可以查帮助mwArray
mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,为了和Cpp变量接轨,设置成1*1的矩阵,mxDOUBLE_CLASS表示变量的精度)
mwArray mwB(1, 1, mxDOUBLE_CLASS);
mwArray mwC(1, 1, mxDOUBLE_CLASS);
// set data,不用我解释了吧,很简单的,调用类里面的SetData函数给类赋值
mwA.SetData(&a, 1);
mwB.SetData(&b, 1);
// using my add,掉我自己写的函数
MyAdd(1, mwC, mwA, mwB);
// get data,不用我解释了吧,很简单的,调用类里面的Get函数获取取函数返回值
c = mwC.Get(1, 1);
std::cout << "c is n" << c << std::endl;
// 后面是一些终止调用的程序
// terminate the lib
MyAddTerminate();
// terminate MCR
mclTerminateApplication();
return 0;
}


//int _tmain(int argc, _TCHAR* argv[])
//{
// return 0;
//}


                  第二,属性页---VC++目录---包含目录,添加:从…到MATLAB/extern/include;

                  第三,属性页---VC++目录---库目录,添加:从…到MATLAB/extern/lib/win64/microsoft;

                  第三,属性页---C/C++---常规----附加包含目录,添加:从…到MATLAB/extern/include;

                  第四,属性页---连接器---常规----附加库目录,添加:从…到MATLAB/extern/lib/win64/microsoft;

                  第五,属性页---连接器---输入----附加依赖项,添加:libeng.lib  libmat.lib   libmex.lib    libmx.lib    mclmcrrt.lib   mclmcr.lib   libMyAdd.lib

      step 6:把生成的libxx.h    libxxx.dll    libxxx.lib 等文件复制到vs下新建的工程的文件夹下,然后添加-----现有项     添加到工程中。

     step 7:然后编译连接,生成运行。即可完成混合编程测试。