mex 文件未在 MATLAB 7.5.0 (R2007b) 中执行

Posted

技术标签:

【中文标题】mex 文件未在 MATLAB 7.5.0 (R2007b) 中执行【英文标题】:mex file not executing in MATLAB 7.5.0 (R2007b) 【发布时间】:2015-08-31 13:18:02 【问题描述】:

我使用 MATLAB coder 从 MATLAB R2012b 创建了一个 MATLAB 文件 test.m.mex 文件。

我得到了输出文件test_mex.mexa64。我希望在 MATLAB 7.5.0 (R2007b) 中使用这个 .mex 文件,但它显示以下错误。

Invalid MEX-file '/work/sreekanthl/test_mex.mexa64': libmwblascompat32.so: 
cannot open shared object file: No such file or directory.

如何使这个.mex 文件在 7.5.0 (R2007b) 中工作?

【问题讨论】:

升级。严重地。升级。 【参考方案1】:

我同意 David Kelley's answer 对于一般 MEX 文件,但对于 MATLAB Coder 生成的 MEX 文件有一个特殊考虑。 MATLAB Coder 生成的 MEX 代码应该是前向兼容的,但通常不应该是后向兼容的。换句话说,您应该能够在比生成它的版本更新的版本中使用此类 MEX 代码,但是不能保证使用早期版本中的代码。

原因是 MEX 代码使用了 MATLAB 附带的各种运行时库。这些库随着时间的推移而发展,新版本的 MEX 文件可能依赖于旧库不提供的功能,或者甚至依赖于旧版本中不存在的新库,如您在此处看到的。

如果您想创建与早期版本兼容的 MEX 代码,您可以生成一个独立的目标,例如静态库或共享库(MATLAB Coder 分别为 LIB 或 DLL),或者:

    在MATLAB中尝试使用loadlibrary调用生成的代码 为其编写通用 MEX 接口并在旧版本中编译该 MEX 代码

这些选项的工作量更大,但应该使您能够创建可在旧版本中使用的 MEX 文件或共享库。

【讨论】:

【参考方案2】:

虽然 TMW 表示 mex 函数通常在版本之间兼容,但遇到问题是 not officially supported 和相当 common。

唯一可靠的选择是使用mex 函数将 Matlab 编码器创建的生成源代码(即 C 代码)简单地重新编译到您想要运行它的版本中。

【讨论】:

根据我的经验,尤其是在旧的 Matlab 版本中运行使用最新版本的 Matlab 编译的 mex 会导致问题。 2014b 版本似乎是一个大断点。使用 2013b 编译通常适用于预先发布的多个版本,但如果使用 >2014b 编译,我总是会遇到问题。

以上是关于mex 文件未在 MATLAB 7.5.0 (R2007b) 中执行的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB mex文件

.mex 文件 matlab。 Libsvm 错误

为啥到达 MEX 文件的最后一行后返回 Matlab 需要这么长时间?

Matlab 缺少依赖项 MEX 文件

mex 文件崩溃,如何在 matlab 中使用 MATLAB_MEM_MGR?

防止 MEX 文件在 MATLAB 中崩溃