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) 中执行的主要内容,如果未能解决你的问题,请参考以下文章
为啥到达 MEX 文件的最后一行后返回 Matlab 需要这么长时间?