在新的 matlab 版本上运行旧的 mex 文件

Posted

技术标签:

【中文标题】在新的 matlab 版本上运行旧的 mex 文件【英文标题】:running old mex file on new matlab releases 【发布时间】:2009-05-12 10:57:23 【问题描述】:

我正在尝试在新版本 (R2009a) 上运行最初在 Matlab 6.5 上测试的程序 该程序使用了一些 mex 文件,尝试运行时出现以下错误:

???无效的 MEX 文件“/normalizedCut/common_files/sparsifyc.mexglx”: normalizedCut/common_files/sparsifyc.mexglx:符号 mxGetIr,版本 libmx.INTERNAL 未在文件 libmx.so 中定义,带有链接时间参考。

(我试图调整的代码是由 Shi & Malic 规范化的,可以在这里找到: http://www.cis.upenn.edu/~jshi/software/files/NcutClustering_7.zip)

如果我尝试在同一系统上运行代码,但 Matlab 2007a 运行正常。

2009a 的向后兼容性有问题吗? 系统中是否有任何标志我可以更改以帮助它工作?

当我用谷歌搜索它时,我看到了一些对 LD_LIBRARY_PATH 环境变量的引用,但究竟应该添加什么我找不到。

谢谢, 亚尔

【问题讨论】:

【参考方案1】:

这些 mex 函数的源代码似乎可在此页面上的“具有标准化切割的图像分割”源中找到:http://www.cis.upenn.edu/~jshi/software/(在解压缩的 .zip 中的 specific_NcutImage_files 子目录中)

【讨论】:

【参考方案2】:

使用不同版本的 Matlab 运行 mex 函数时出现问题是很常见的。您遇到的错误看起来像是由于 Matlab 中的 API 更改造成的(尽管这让我有点吃惊)。由于 gcc 的变化引起的二进制不兼容,我遇到了最大的麻烦。我建议联系Jianbo,询问他是否可以构建新版本或发布源代码。

最坏的情况,您可以尝试重新实现这些 mex 函数。标准化切割算法在 Matlab 中非常简单(参见Shi and Malik paper)。根据 mex 函数的名称,它们看起来主要是在复制现有的 matlab 功能(矩阵乘法、矩阵稀疏化)。如果您将它们重新实现为常规的 m 代码函数,由于已添加到 Matlab 中的多核支持,它们无论如何都会更快。

【讨论】:

以上是关于在新的 matlab 版本上运行旧的 mex 文件的主要内容,如果未能解决你的问题,请参考以下文章

Matlab R2016a Mex 文件错误

升级到 macOS Mojave 后,MATLAB 不再卸载 MEX 文件

无效的 mex 文件错误(libstd++ 版本)

Matlab 缺少依赖项 MEX 文件

从 .mexglx 到 .mex

从 .mexglx 到 .mex