Matlab 缺少依赖项 MEX 文件
Posted
技术标签:
【中文标题】Matlab 缺少依赖项 MEX 文件【英文标题】:Matlab missing dependency MEX-file 【发布时间】:2015-03-18 19:22:33 【问题描述】:我在 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】:您所指的那个库 - 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 并选择所需的编译器。鉴于您的错误,您使用的是 64 位 Linux,因此您应该很容易获得 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 使用。
祝你好运!
【讨论】:
以上是关于Matlab 缺少依赖项 MEX 文件的主要内容,如果未能解决你的问题,请参考以下文章