【问题标题】:mex file not executing in MATLAB 7.5.0 (R2007b)mex 文件未在 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) 中工作?

【问题讨论】:

  • 升级。严重地。升级。

标签: matlab mex matlab-coder


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 根据我的经验,尤其是在旧的 Matlab 版本中运行使用最新版本的 Matlab 编译的 mex 会导致问题。
    • 2014b 版本似乎是一个大断点。使用 2013b 编译通常适用于预先发布的多个版本,但如果使用 >2014b 编译,我总是会遇到问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多