【问题标题】:Trying to compile existing matlab code but getting mex error: not a normal file or does not exist试图编译现有的 matlab 代码但得到 mex 错误:不是普通文件或不存在
【发布时间】:2025-12-22 21:20:13
【问题描述】:

我正在尝试从此处的 LSVM 代码设置车辆检测系统:https://github.com/rbgirshick/voc-dpm

我正在使用 Red Hat Linux 和 Matlab 2011a。

我已经解压了上述系统的文件并打开了 Matlab。我选择解压文件所在的整个目录以及其中的所有子目录,然后右键单击并执行“添加到路径”。

然后我在 Matlab 中右键单击 compile.m,然后点击运行。

但我收到以下错误:

mex: fv_cache/fv_cache.cc not a normal file or does not exist.

Warning: Maybe you need to call fv_cache('unlock') first?

有人知道如何解决这个问题吗?

我尝试在编译文件的不同位置调用fv_cache('unlock'),但无济于事。我对 Matlab 和整个 mex 的事情并没有真正的经验。

【问题讨论】:

  • 好吧,fv_ache/fv_cache.cc 在我看来很可疑。不应该是fv_cache/fv_cache.cc吗?另外,请尝试确保您的工作目录位于compile.m 所在的位置,然后在命令行中键入compile 而不是右键单击。 (这也可能是您的特定编译器的一些问题,但似乎更有可能只是路径问题)。
  • 对,这只是我的问题中的一个错字 - 我已经修复了它。我真的是 Matlab 的新手......“添加到路径”选项不是让它成为我的工作目录吗?目录结构从 voc-releast5 开始,这是我“添加到路径”的*文件夹,也是 compile.m 所在的位置。我曾尝试在 matlab 的命令行上输入“编译”,但得到了同样的错误。编译命令的定义是:compile(opt, verb, mex_file)。所以我也尝试了compile('on','on') ...但没有奏效。
  • 我还在matlab命令行中使用addpath()命令添加了fv_cache的绝对路径。但我遇到了同样的错误。我还使用 File>Set Path 添加了这个路径。有什么我想念的吗?
  • 您得到的错误与 MATLAB 搜索路径无关,因为正在找到并运行命令本身 (compile)。 compile 正在寻找的 mex 源文件更像是一个数据文件,并且是从当前工作目录中引用的。这就是为什么@nkjt 建议您将工作目录设置为包含compile.m 的目录(使用的命令是cd),而不是乱用MATLAB 搜索路径。
  • 运气好,请更新一下?

标签: linux matlab computer-vision mex


【解决方案1】:

这可能是因为 fv_cache.cc 没有正确编译。我的解决方案是在 64 位机器上编译时使用 $ mex -DMX_COMPAT_32 $。

【讨论】:

    最近更新 更多