为了搞manifold,要用到matlab编译,网上找的
软件下载地址: https://sourceforge.net/projects/gnumex 软件安装和使用说明: http://gnumex.sourceforge.net/
软件功能: 在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程序选用的编译器) - 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 看到上面的gcc了吗,这说明我们的设置已经生效了,现在mex用的是gcc为编译器。 做个c程序的例子 复制MATLAB根目录下 extern\examples\mex\yprime.c 文件到自己的测试目录下。例如gnumex的examples目录下。 mex yprime.c 就完成了编译工作,生成 yprime.mexw32 文件。 我们可以在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. 如果测试程序删不掉,如yprime.mexw32文件无法删除,说明matlab运行了这个程序而没有卸载。我们在MATLAB上输入clear yprime。然后就可以正常删除了。 3. gcc有很多的options,和注意事项。如果大家想更好学习gcc。建议参考官方的文档http://gcc.gnu.org/onlinedocs/,也可以找一份中文的参考文档慢慢研究。 gnumex的gcc使用的默认的options是 -O3 -mcpu=pentium -malign-double -fno-exceptions 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 就可以了。 6. 通过autotool使用makefile调用MATLAB编译mex文件的方法和工具可以参考 http://gnumex.sourceforge.net/autotools/。这是一个非常有用的话题,等于把Windows的MATLAB移植到MinGW下使用。可以通过Makefile大批量编译文件。值得关注和研究。
kaien 26/07/2009 根据大家的回复,由于gnumex的版本到2.01就不更新了,所以不支持MATLAB2008以后的版本,因此我替作者给程序做了修正,算是版本v2.02吧。测试已经兼容了MATLAB2010。 更新文件下载: http://kaienfr.ys168.com/ 替换2.01版的同名文件即可使用。 另外,对于matlab2010,使用gnumex编译前,必须用文本编辑器打开matlab目录下的bin/mex.pl文件,把两个$IMPLICIT_LIBS删掉,这样就不会出现gcc: getValidInputLinkLibraries: No such file or directory 的错误了。 kaien 01/09/2010 |