看标题别以为我是抄书,如<精通Matlab与c/c++混合编程设计 第二版>一书,毕竟网上已经一堆了,我实在不好意思做网页的搬运工,当然解决过程还是有的,在文章尾部。
环境是matlab7和vc++6,老土是老土点了,能用就行。上文提到的书本作者,你出来,我保证不打你:P134结尾部分,提到"在Output file name 文本框中更改输出文件的扩展名,如果是32位系统则改为mexw32..."。我诚实的跟着你做失败了。如果搜索到本文的读者按此书依样画葫芦失败了,不妨换个思路,不要盲目的在网上找帖子,因为其他的环境未必适合你,而且我也不能拍胸脯保证我的能过。
首先,不得不承认,matlab有强大的文档,也不得不承认我们很懒,懒到不相信文档。当然可以说不会找。我展示下我怎么搜索到这个环境的搭建的。
没猜错,大家都是从编写简单的mexFunction开始的,这之前,会运行mex -setup来搭建编译环境,然后在熟悉的vs环境下开发,最后在matlab命令框中用mex xxx.c的方式编译mex源文件。不知道大家有没有注意,如果代码有语法问题,matlab的出错提示和vs的出错提示相像,如果回过头看看介绍手头介绍c与matlab混合编程的书,上面会说mex编译时用的就是setup时选择的编译器。先搜搜文档上关于mex -setup的内容,结果如下:
该页面的最下方有个连接跳转到帮助文档中所有关于mex文件注意事项的入口处,其中提到了在windows下编译mex的方法:
点击进入,开始是关于命令行工具搭建编译环境,拖到最下面是IDE工具的搭建:
上面的步骤描述的很清楚,其中没有要求修改输出文件名为.mexw32...
文档上虽然描述了编译的过程,但是没有提到怎么运行,我尝试了几次,把调用mex输出文件放在本文最后。
参考这个文档总结出整个过程如下:
1.创建工程名为sums的空dll工程,源码如下
#include "mex.h" #include "matrix.h" void mexFunction(int outArgc,mxArray* outArgv[],int inArgc,mxArray* inArgv[]) { mexPrintf("sums\n"); }
2.设置链接库和头文件 预定义宏
2.1)头文件路径和预定义宏
2.2)链接库及路径:
3.创建并添加def文件
LIBRARY sums.dll EXPORTS mexFunction
动态库的名字是sums.dll因此library名为sums.dll,mex文件的调用入口函数是mexFunction。因此要导出这个函数。
4.设置mex文件的调试工具,这个倒可以参考文章开头提到的书
6.设置断点,vc++6中F5调试运行,之后会跳出matlab。如何才能进入mexFunction函数?先在matlab命令行中切换到dll文件所在路径,然后输入vc++dll的名字作为matlab的函数名,我的输出是sums.dll,因此这个函数名是sums
至此,已经可以调试mex文件了