gunmex在matlab中的配置(WinGW和cygwin)
在Window xp/7下使用Linux的C/C++代码,编译成DLL供Matlab混合编程使用,目前有两个window下的编译器cygwin和WinGW,这两个编译器都可以在Window下模拟Linux环境,并对C(gcc)和C++(g++)进行编译,cygwin以及WinGW,如果是混合Matlab编程,个人推荐使用WinGW,安装简单,使用方便。
以下是总结一些网上的文章,对我们初学者有些帮助,在此一并感谢原作者。
在windows下用的g++编译器,以前用过这方面的MinGW,今天上网下载这个程序,发现这边的网速不行,因为它支持的是在线安装。在/上可以看到其安装程序。
里面的开发包都好老,在经历了很多次失败后,我决定手工安装。
一.手工安装方法:来自/articles/windows%E4%B8%8Bmingw%E7%9A%84%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8.html
MinGW提供了一个编写Windows应用程序的完整开源工具包。
1)MinGW的安装
MinGW的安装,其实非常简单。
因为手动安装有着更多的灵活性,所以这里重点说一下手动安装的步骤。安装MinGW至少需要四个包:
* binutils
* gcc-core
* mingw-runtime
* w32api
把这些包下载下来,放到C:/MinGW目录下(当然,放到哪里都一样),然后在windows的cmd里,用下面的命令解压出来:
C:/MinGW>gzip -d -c binutils-2.17. | tar x
C:/MinGW>gzip -d -c gcc-core-3.4. | tar x
C:/MinGW>gzip -d -c mingwrt-3.15. | tar x
C:/MinGW>gzip -d -c w32api-3. | tar x
C:/MinGW> set path=C:/MinGW/bin;%path%
其实各个包的目录结构都是一样的,所以,解压后的目录结构仍然为一样的。其它的包也可以采用这样的方法来处理。只是要知道,我们解压是需要把这几个包混合起来,而不要只是习惯性的分别解压到一个文件夹里!
这个时候,最好推荐用命令行的方式来解压,不容易出错;如果系统没有装gzip或是类似的软件,可以用Cygwin来解压。
最后一行命令是添加path到环境变量里,如果你经常使用,需要把这个变量永久的添加到path变量里。
当然,你可以根据你的需要选择更多的包,例如说gcc-g++ for C++、gcc-objc for Objective C、gcc-g77 for Fortran 77、gcc-java for Java或gcc-ada for Ada。如果需要这些包的话,只需要在上面的命令里多解压一个包即可。
2)MinGW的使用
现在我们可以直接在windows cmd里来使用gcc之类的命令来编译程序了。
比如说下面这个C程序:
#include<stdio.h>intmain(intargc, char **argv)
{
printf (“Start to use MinGW”);
gnu编译器return (0);
}
假如你想从hello.c生成一个在终端模式下的可执行文件。只要直接用gcc编译器进行编译就行了:
gcc-chello.c
这个命令把hello.c编译成一个目标文件hello.o,然后用下面的方法生成一个可执行文件:
gcc-o hello hello.o
事实上,作为一种选择,你可以使用下面的命令把编译和链接放到一步中完成:
gcc-o hello hello.c
下面是一个简单的c++程序的代码示例,复制并粘贴到一个叫hello.cpp的文件中试试看:
#include<iostream>
intmain(intargc, char **argv)
{
std::cout<< “Start to use MinGW to compile C++” <<std::endl;
return (0);
}
对于c++程序来说,可以使用g++来编译和链接:
g++-c hello.cpp
g++ -o hello hello.o
对于gcc、g++及其他编译器的使用,可以查询各自的手册以获得更多的帮助。
二.配置在matlab下调用gcc编译器
软件下载地址: sourceforge/projects/gnumex
软件安装和使用说明: gnumex.sourceforge/
软件功能:
在MATLAB上调用MinGW或Cygwin编译C和Fortran的mex代码。
这就意味着,我们可以在MATLAB上编译Linux的C程序代码和调用Linux的库编译出MATLAB能用的Mex程序。Whata nice tool!
安装步骤:
1. Sourceforge上下载软件,目前最新版2.01。解压缩到任意一个固定的目录。如C:/MATLAB/gnumex
2. 运行MATLAB,把上面的目录加入到MATLAB的path中。
3. MATLAB上输入命令gnumex运行安装设置。设置很简单,主要是一下几个方面
- MinGW的root目录 (如果使用的是MinGW的gcc,这里必须设置正确)
- Cygwin的root目录 (同上,使用时设置,否则留空)
- f95 和gfortran的目录 (有的话就设置,没有的话留空。这个是编译fortran程序选用的编译器)
注意: gfortran是gcc的一个组件,这个一般都有,就在MinGW的root目录/bin下面。最好选上,有备无患。
- linking环境这里选用mingw或cygwin根据自己的需要设置。注意 -mno-cygwin这一项是指在cygwin中link的时候使用windows的lib. 据说这个Cygwin gcc的option争议很大,功能不健全,在官方的maillist上要求取缔此项功能的言论很多,虽然目前仍然在更新和支持中。所以,建议还是使用MinGW比较好。
- 语言方便,选用自己需要的C/C++或fortran语言。
-
Generate 里选择mexdll. 这个一般是默认的。当然mex也可以编译成 exe文件。根据需要选择。建议使用mexdll。这个可以再matlab上像一般函数一样直接调用程序,很方便。
关于最后的两个路径,建议默认。最后一个mexopts.bat的路径是MATLAB默认的mex程序设置路径,我们覆盖这个文件将使我们的设置成为mex的默认设置。这样就可以直接调用mex编译,如
mex你的命令
而不用加参。加参使用的方法如:
mex -f 你的mex设置文件.bat 你的命令
如果你不想改变默认的mex设置,也可以把这个文件保存在其他方便的位置。需要的时候使用 -f 参数调用。
设置完成后,按make option file确认即可。
提示:
1- 如果想重新设置MATLAB的mex.可以使用mex -setup 设置。这是matlab的默认命令和gnumex无关。
2- 如果要查看当前mex的设置情况,可以使用mex -v 来查看。
3- 你可以在gnumex的File菜单下,选择save config保存当前的设置界面信息到gnumexcfg.mat中。下次修改的时候可以使用菜单上的Load config调用。
测试运行:
先检查一下mex的设置是否生效
mex -v
我们看到
MATLAB = D:\MATLAB~1
-> COMPILER = gcc
-> Compiler flags:
COMPFLAGS = -c-DMATLAB_MEX_FILE
OPTIMFLAGS = -O3
DEBUGFLAGS = -g
看到上面的gcc了吗,这说明我们的设置已经生效了,现在mex用的是gcc为编译器。
做个c程序的例子
复制MATLAB根目录下 extern\examples\mex\yprime.c文件到自己的测试目录下。例如gnumex的examples目录下。
输入命令
mexyprime.c
就完成了编译工作,生成 w32 文件。
我们可以在MATLAB上调用这个程序运行看看。
yprime(1,1:4)
ans =
2.0000 8.9685 4.0000 -1.0947
提醒: MATLAB对命令的优先级是,当前目录下的程序最优先。
使用技巧:
1. 如果你使用的是cygwin,注意一定要把cygwin里的cygwin1.dll文件(在root的bin里面) 加入到windows的path里(而不是matlab的path里)。因为cygwin的程序需要调用这个动态链接库才能使用。这也是cygwin的不方便之处,而且会影响程序的运行速度。最重要的是,目前该软件对cygwin的版本支持很老(只支持cygwin的gcc 3.2),现在的4.x都不支持。所以建议使用MinGW吧。那个没版本限制,我已经成功的和最新的gcc4.4.1兼容了。
2. 如果测试程序删不掉,如w32文件无法删除,说明matlab运行了这个程序而没有卸载。我们在MATLAB上输入clear yprime。然后就可以正常删除了。
3. gcc有很多的options,和注意事项。如果大家想更好学习gcc。建议参考官方的文档/onlinedocs/,也可以一份中文的参考文档慢慢研究。
gnumex的gcc使用的默认的options是 -O3 -mcpu=pentium -malign-double-fno-exceptions
需要什么option, 大家可以手动修改mexopts.bat文件。(高级用户使用,不熟悉gcc的人慎用)
4. 调用LAPACK/BLAS的方法。建议直接调用MATLAB里提供的lib静态库。位置在extern/lib/win32/microsoft/ 分别是 libmwlapack.lib 和libmwblas.lib. 使用的时候可以直接输入全地址调用,也可以用 -lmwlapack-lmwblas作为MATLAB的option使用(放在最后)。如果想用自己优化过的lapack和blas库,使用的时候可以直接输入全地址。也可以把他们改名,前面加lib,然后复制到上面提到的位置下,通过-l调用。例如: 你有optlapack.lib文件,改名为liboptlapack.lib 放到extern/lib/win32/microsoft/ 下。然后mex命令中使用的时候加入 -loptlapack就可以了。

5. 如果你要link一个fortran的obj(o)或lib(a)文件到一个c程序中,那么请注意在编译fortran的时候使用-fno-underscoring。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。