我在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',...
答案 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使用。