Matlab缺少依赖项MEX文件

时间:2015-03-18 19:22:34

标签: matlab shared-libraries flann

我在matlab中有一个调用其他库的脚本。我在linux上使用matlab版本2012a。我得到以下错误,我不知道如何解决它。

错误是:

  

无效的MEX文件'/home/XXX/nearest_neighbors.mexa64':   libflann.so.1.8:无法打开共享对象文件:没有这样的文件或   目录

     

flann_search出错(第82行)           [indices,dists] = nearest_neighbors('find_nn',data,testset,n,params);

     

MyScript中的错误(第73行)               [nresult,ndists] = flann_search(Ntraindata',Ntraindata',resu.KNN,struct('algorithm','composite',...

1 个答案:

答案 0 :(得分:1)

您所指的那个库 - https://github.com/mariusmuja/flann/ - 具有用MEX代码编写的nearest_neighbors函数。 MEX代码是用于与MATLAB接口的C代码。人们通常会在MEX中编写大量计算代码的代码,因为众所周知,它可以更快地处理循环和其他事情。输入来自MATLAB并发送到此MEX功能,输出来自MEX功能并通过管道传送回MATLAB。它基本上是一个漂亮的黑盒子,你可以像任何其他MATLAB函数一样使用它。事实上,MATLAB附带的许多功能都是为了促进加速而编写的MEX包装器。

您收到该错误是因为您需要编译 nearest_neighbors函数,以便有一个可以在MATLAB中调用的MEX包装器。由于您还没有编译代码,因此缺少该包装。

首先,您需要设置MEX。确保您的编译器与您的MATLAB版本兼容。您可以访问以下链接:

http://www.mathworks.com/support/compilers/R20xxy/index.html

xx是属于您的MATLAB的版本号,y是它后面的字符代码。例如,如果您使用的是R2013a,则可以访问:

http://www.mathworks.com/support/compilers/R2013a/index.html

在那里,请转到您的操作系统并确保安装了其中一个受支持的编译器。安装完成后,进入MATLAB,在命令提示符下键入:

mex -setup

这将允许您设置MEX并选择所需的编译器。鉴于您的错误,您使用的是Linux 64位,因此您应该很容易获得GCC。只需确保选择与您的MATLAB版本兼容的GCC版本。选择编译器后,可以在命令提示符中编译代码:

>> mex -v -O nearest_neighbors.cpp

这应该为您生成nearest_neighbors MEX文件。完成后,您现在可以运行代码。


有关更详细的说明,请查看FLANN的用户手册 - http://people.cs.ubc.ca/~mariusm/uploads/FLANN/flann_manual-1.8.4.pdf - 它告诉您如何构建和编译它以供MATLAB使用。


祝你好运!