njustyxy

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  35 随笔 :: 0 文章 :: 1 评论 :: 0 引用

公告

2011年5月28日 #

为了搞manifold,要用到matlab编译,网上找的

 

gnumex - Matlab下调用gcc编译

软件下载地址: 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程序选用的编译器)
注意: 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

就完成了编译工作,生成 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
需要什么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。

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


posted @ 2011-05-28 22:11 yxy 阅读(270) 评论(0) 编辑

 

 

posted @ 2011-05-28 20:40 yxy 阅读(21) 评论(0) 编辑

看到老外的一个教学,正好在学。转一下

 

This course is an introduction to the computational theory of manifolds. Manifold models arise in various area of mathematics, image processing, data mining or computer science. Surfaces of arbitrary dimension can be used to model non-linear datasets that one encounters in modern data processing. Numerical methods allow to exploit this geometric non-linear prior in order to extract relevant information from the data. These methods include in particular local differential computations (related to the Laplacian operator and its variants) and global distance methods (related to geodesic computations). In this course, you will learn how to perform differential and geodesic computations on images, volumes, surfaces and high dimensional graphs.

The course includes a set of Matlab experiments. These experiments give an overview of various tasks in computer vision, image processing, learning theory and mesh processing. This includes computation of shortest paths, Voronoi segmentations, geodesic Delaunay triangulations, surface flattening, dimensionality reduction and mesh processing.

One should copy/paste the provided code into a file named e.g. experiments.m, and launch the script directly from Matlab command line > experiments;. Some of the scripts contain "holes" that you should try to fill on your own.

 

 

posted @ 2011-05-28 19:46 yxy 阅读(63) 评论(0) 编辑