Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18251
  • 博文数量: 16
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 132
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-08 20:43
文章分类

全部博文(16)

文章存档

2015年(16)

我的朋友

分类: 信息化

2015-08-14 19:54:21

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帮助文件,这里不赘述。

阅读(1351) | 评论(1) | 转发(0) |
0

上一篇:VS2010 问题

下一篇:eclipse安装教程

给主人留下些什么吧!~~

ddnntthh2016-08-28 17:52:54

您好,执行mex -O -largeArrayDims xx.cpp命令后,出现D:\\PROGRA~2\\MATLAB\\R2013A\\BIN\\MEX.PL: Error: Compile of \'mex_affinity_option.cpp\' failed. 
 
Error using mex (line 206)
Unable to complete successfully.错误,但是直接编译的话,即 执行mex xx.cpp命令的话,则可以成功编译,这是什么原因呢,能否请您帮助解答下,谢谢。