matlab 与c++的混编

 环境: V7 32位
matlab: R2011b
  visual studio 2010
 
目标:将matlab的文件生成c可以调用的文件。至于为什么要这么做呢?我的情况是 我目前有很多函数是用matlab编的,而我的C++工程又需要这些函数,要是重新用C++来写的话工程量太大,并且有些函数是MATLAB库函数中的,所以一个简单化的想法是将M文件生成C可以调用的文件。
 
步骤:
   1、matlab命令窗口中 输入 mbuild -setup    安装编译器
 Welcome to mbuild -setup. This utility will help you set up
a default compiler. For a list of supported compilers, see
http://www.mathworks.com/support/compilers/R2011b/win32.html
 
Please choose your compiler for building standalone MATLAB applications:
 
Would you like mbuild to locate installed compilers [y]/n? y
 
Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:PROGRA~1MATLABR2011bsyslcc
[2] Microsoft Visual C++ 2010 in d:Program FilesMicrosoft Visual Studio 10.0
 
[0] None
 
Compiler: 2
 
Please verify your choices:
 
Compiler: Microsoft Visual C++ 2010
Location: d:Program FilesMicrosoft Visual Studio 10.0
 
Are these correct [y]/n? y
 
我是选的2,如果这里没有显示你的visual studio  那么你还要设置路径,自己再去查下怎么设置
确定y后,就安装完成了
 
2、mcc -W cpplib:lib**** -T link:lib****.m   ***处为你的m文件名字。
然后就会生成一系列文件,我们有用的是
   .dll    .h    .lib   这三个文件。这这三个文件放到你的工程下面
 
 
3.工程设置
3.1附加包含目录加入你的matlab安装路径下的extern include     比如:D:Program FilesMATLABR2011bexterninclude
 
3.2  链接器附加库目录 加入  lib   D:Program FilesMATLABR2011bexternlibwin32microsoft
 
 
 
3.3    附加依赖项。要把刚生成的.lib 加入,还有其他的如下面圈出来的几个库也需要
 
 
 
然后就可以调试了,我在网上拷了个简单的程序
#include <iostream>
//#include "mclmcr.h"      //这里不注释掉,则找不到mclInitializeApplication,原因是mclmcrrt.h这个头文件才是更新的头文件。
#include "mclmcrrt.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "libmysvd.h"
 
using namespace std;
 
int main()
{
 
 if( ! mclInitializeApplication(NULL,0) )
 {
  fprintf(stderr, "Could not initialize the application.n");
  exit(0);
 }
 
  if(!libmysvdInitialize()) //初始化,在libmysvd.h中
  {
   cout << "Could not initialize libmysvd!" <<endl;
   exit(0);
  }
 
 double data[9]={1,2,3,4,5,6,7,8,9};
 mwArray a(3,3,mxDOUBLE_CLASS,mxREAL);
 
 a.SetData(data,9);
 cout<<a<<endl<<endl; //显然,mwArry类对<<是有运算符重载的
 
 mwArray s(3,3,mxDOUBLE_CLASS,mxREAL);
 mwArray v(3,3,mxDOUBLE_CLASS,mxREAL);
 mwArray d(3,3,mxDOUBLE_CLASS,mxREAL);
 
 //mysvd(3,s,v,d,a); //调用自己用matlab写的函数,对a做奇异值分解
 
 cout<<s<<endl<<endl;
 cout<<v<<endl<<endl;
 
 for (int i=1;i<4;i++) //逐个显示元素
 {
  for (int j=1;j<4;j++)
  {
   cout<<d.Get(i,j)<<" ";
  }
  cout<<endl;
 }
 
 cin.get();
 return 0;
}
 
 
但是运行的时候会出现错误,
 
应该是程序方面的问题,再进行调试
 
 
 
原文地址:https://www.cnblogs.com/yazifei/p/3722973.html