在八度音程中运行 matlab 项目时,mex 函数未定义错误

Posted

技术标签:

【中文标题】在八度音程中运行 matlab 项目时,mex 函数未定义错误【英文标题】:mex function undefined error while running matlab project in octave 【发布时间】:2019-03-17 06:50:04 【问题描述】:

我实际上是 matlab 新手。

我正在尝试在我的 ubuntu 机器上以倍频程运行 this matlab 项目。它有一个名为“bm3d_thr”的函数,用于其中一个文件(BM3D-Net/library/bm3d-denoising/BM3D.m 文件的第 342 行),如下所示:

y_hat = bm3d_thr(z, hadper_trans_single_den, Nstep, N1, N2, lambda_thr2D,...
    lambda_thr3D, tau_match*N1*N1/(255*255), (Ns-1)/2, (sigma/255), thrToIncStep, single(Tfor), single(Tinv)', inverse_hadper_trans_single_den, single(thr_mask), Wwin2D, smallLN, stepFS );

我的八度路径中还有相应的 mex 文件(名称为“bm3d_thr.mexa64”)。

问题是当我尝试运行项目时(通过说“演示”),它给出了以下错误:

error: 'bm3d_thr' undefined near line 342 column 9
error: called from
    BM3D at line 342 column 7
    bm3d_net_res at line 5 column 7
    demo at line 9 column 7

有人可以帮我弄清楚这里出了什么问题并让它工作。我想问题是我的机器上没有编译 mex 文件,但作者没有提供这个 mex 文件的源代码。

任何帮助将不胜感激。

提前致谢。

【问题讨论】:

该 MEX 文件适用于在 64 位 Linux 上运行的 MATLAB。如果不先重新编译它,它将无法与 Octave 一起使用。如果你没有资源,那你就倒霉了。 您尝试运行的项目中的那个库来自另一个项目 (cs.tut.fi/~foi/GCF-BM3D/index.html#ref_software)。原网站不提供 Mex 文件的源代码。 哦!这听起来很不幸。无论如何,感谢@CrisLuengo 和 Rish 的回复。我想,我别无选择,只能离开 octave 并尝试在 matlab 本身中运行该项目。 【参考方案1】:

来自 Matlab 的二进制 MEX 文件是 not compatible with Octave。您需要使用 Octave 的 mexmkoctfile --mex 命令从源代码重新编译项目中的所有 MEX 文件。

如果作者没有提供此 MEX 文件的来源,则您是 SOL。在他们的 GitHub 存储库上发布一个问题,要求提供源代码。还有祝你好运。 :)

【讨论】:

以上是关于在八度音程中运行 matlab 项目时,mex 函数未定义错误的主要内容,如果未能解决你的问题,请参考以下文章

如何将结构转换为hdf5格式并用八度音程保存

无法使用 mkoctfile --mex 以八度音阶构建 mex 文件

尝试编译 MEX 文件时缺少 libkernel32

MATLAB + Mex + OpenCV:链接和编译正确,但在运行时找不到库

在 MATLAB MEX 文件中使用 Thrust 的运行时链接器错误

在 matlab 中使用库(gcc)和编译 mex 时出错