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

时间:2009-05-12 10:57:23

标签: matlab mex

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

???无效的MEX文件'/normalizedCut/common_files/sparsifyc.mexglx': normalizedCut / common_files / sparsifyc.mexglx:symbol mxGetIr,version libmx.INTERNAL未在文件libmx.so中定义,并带有链接时间参考。

(我试图修改的代码是Shi& Malic的Normalized cut,可以在这里找到: http://www.cis.upenn.edu/~jshi/software/files/NcutClustering_7.zip

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

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

当我用Google搜索它时,我看到了一些对LD_LIBRARY_PATH env变量的引用,但究竟应该添加到它中我无法找到它。

谢谢, 亚伊尔

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

使用不同版本的Matlab运行mex函数时遇到问题是很常见的。你得到的错误看起来像是由于Matlab中的API变化(虽然这让我感到惊讶)。由于gcc变化引起的二元不兼容性,我遇到了最大的麻烦。我建议联系Jiambo并询问他是否可以建立新版本或发布源代码。

最糟糕的情况是,您可以尝试重新实现这些mex功能。标准化剪切算法在Matlab中非常简单(参见Shi and Malik paper)。通过mex函数的名称,它们看起来像是重复现有的matlab功能(矩阵乘法,矩阵稀疏化)。如果你将它们重新实现为常规的m代码函数,那么非零的机会,无论如何它们都会更快,因为已经添加到Matlab中的多核支持。