matlabgcc函数,gnumex–Matlab下调⽤gcc编译学步园
软件功能:
在MATLAB上调⽤MinGW或Cygwin编译C和Fortran的mex代码。
这就意味着,我们可以在MATLAB上编译Linux的C程序代码和调⽤Linux的库编译出MATLAB能⽤的Mex程序。What a 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 ⾥选择 mex dll. 这个⼀般是默认的。 当然mex也可以编译成 exe⽂件。根据需要选择。建议使⽤mex dll。这个可以再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⽬录下。
输⼊命令
mex yprime.c
就完成了编译⼯作,⽣成 w32 ⽂件。
我们可以在MATLAB上调⽤这个程序运⾏看看。
yprime(1,1:4)
ans =
linux下gcc编译的四个步骤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。然后就可以正常删除了。
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。
kaien 26/07/2009
根据⼤家的回复,由于gnumex的版本到2.01就不更新了,所以不⽀持MATLAB2008以后的版本,因此我替作者给程序做了修正,算是版本v2.02吧。测试已经兼容了MATLAB2010。
另外,对于matlab2010,使⽤gnumex编译前,必须⽤⽂本编辑器打开matlab⽬录下的bin/mex.pl⽂件,把两个$IMPLICIT_LIBS删掉,这样就不会出现gcc: getValidInputLinkLibraries: No such file or directory 的错误了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论