matlab调用c++涉及到的mex文件

来源:互联网 发布:希尔瓦娜斯 知乎 编辑:程序博客网 时间:2024/04/29 08:28

matlab调用c++涉及到的mex文件

1 相比于c++,matlab的效率较低,为了解决这个问题,大家在matlab中调用c++,也就是说matlab调用的一些函数,本身是由c++编写完成的,执行的时候也是在c++编译器中执行。实现这个功能的媒介是后缀为mex的文件, 比如mexw32、mexglx等,后面几位代表的是操作系统。

 

mex文件的生成这里我就不介绍了,我主要是用别人的工具包,包里面已经有这些文件了,这里我主要想说的是怎么使用这个文件。按照一般的习惯,我会把工具包中的所有东西添加到matlab的路径中,但是这样是有问题的。对于在C++中实现的函数,比如vl_imsooth,它体现的文件是vl_smooth.mexw32(当然操作系统不同,后缀有所不同),但为了说明它的使用,一般还会有一个vl_imsmooth.m文件,这个文件完全是一个脚本文件,所有的文字都注释起来,只是为了解释vl_smooth函数的使用,如果把这个m文件加入matlab路径时,执行到vl_smooth函数,matlab就跳转到vl_smooth.m执行,而不是vl_smooth.mexw32。所以matlab的包含路径不可以包含这个m文件。在添加路径时要注意这个问题。不过一般这种情况,工具包会提供一个函数来实现matlab的路径配置,执行这个函数就好了。

 

至于matlab调用c++的细节,可以参考以下文章:

http://blog.csdn.net/mitedu/article/details/5921173

http://blog.csdn.net/mitedu/article/details/6313045




2  mex文件后缀问题

mex文件的后缀有mexw32,mexw64,mexmaci,mexglx,mexa64等,mexext指令能看到。mexw32和mexw64分别是windows 32位操作系统和64位操作系统。mexmaci应该是苹果操作系统,mexglx和mexa64分别是linux 32位操作系统和64位操作系统。

有xx.cpp(或c)文件时,一般是直接 mex xx.cpp就可以了。但是我在linux64位系统上这么处理的时候,虽然生成了对应的xx.mexa64文件,但是调用的时候报错,错误是:

Function "mxGetIr_700" is obsolete in file "compat32.cpp", line 282.(64-bit mex files using sparse matrices must be rebuilt with the "-largeArrayDims" option. See the R2006b release notes for more details.)

这个应该是属于兼容的问题,解决方案是使用mex时加上一些option。命令行是mex -O -largeArrayDims xx.cpp. option的具体公用参考matlab帮助文件,这里不赘述。

0 0
原创粉丝点击