耗时近两个星期,终于整的可以用了。我的目的是要从64位的matlab上调用一个函数库。由一些Fortran代码,很多shell脚本,大量makefile和几个用c与fortran混合编写的mex文件组成。因为其命令大多是bash脚本,所以只能在类unix平台实现。
最一开始在32位utunbu虚拟机装了matlab r14。安装过程也颇费周折,因为装上后只能出来命令行的matlab,出不来IDE。后来发现是找不到java虚拟机的缘故。装个jre6,设置javahome以及path等环境变量后即正常了。但本子配置不算太好,运算规模大点的问题就慢的厉害,所以决定还是回到win7的64位matlab 2010a。
于是开始试着在cygwin上完成这个工作,计划使用了g95做为编译器,以及使用gnumex来产生mexopts.bat。 可实际开始做时,才知道matlab 64位不能调用32位mex,所以当时困惑的厉害,网上也找不到解决方法。看有人说道gnumex对mingw支持比cygwin好,我直接下载了mingw-w64,一个拥有64位gcc和64位gfortran的mingw。
首先下载了近二百M的mingw-w64文件,又找了一个32位的msys安好了。其后将msys的mingw指向mingw-w64的安装文件即可。windows shell下的mex命令是matlab bin目录中的mex.bat,这个在msys中不能执行。我们还要构造一个类似mex.bat的msys脚本。这个脚本调用mex.pl,同时将命令行参数传给mex.pl。
gnumex并没有运行起,在gnumex的官网上看到一个用户提到怎样运行在matlab 2010a上,于是照猫画虎做了一遍。但还解决不了问题,有了这些经验,于是自己在gnumex中下了断点,慢慢的跟踪的看出了啥问题。最主要的是要用matlab的mex命令基于64位的c编译器

本文详细介绍了如何在64位Windows 7系统上,利用mingw-w64和Matlab 2010a 64位进行混合编译,涉及Fortran代码、shell脚本、makefile以及c和Fortran混合的mex文件。过程中遇到的挑战包括32位和64位兼容性问题、库的链接错误等,并给出了解决方案,包括使用gnumex、vc++ 2008和Windows SDK,以及解决未定义引用和 mex 文件运行时的问题。
最低0.47元/天 解锁文章
16万+

被折叠的 条评论
为什么被折叠?



