1

我在 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',...

4

1 回答 1

1

您所指的那个库 - https://github.com/mariusmuja/flann/ - 具有nearest_neighbors用 MEX 代码编写的函数。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 并选择所需的编译器。鉴于您的错误,您使用的是 64 位 Linux,因此您应该很容易获得 GCC。只需确保选择与您的 MATLAB 版本兼容的 GCC 版本即可。选择编译器后,您可以通过在命令提示符下执行以下操作来编译代码:

>> mex -v -O nearest_neighbors.cpp

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


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


祝你好运!

于 2015-03-18T19:41:34.720 回答