在新的 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 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在新的 iOS 7 和 Xcode 5 上使用旧 ios 版本构建我的应用程序
Webservice 在新的 SQL Server 2014 实例上出现大量死锁