如何使 Coder 工具包创建的 MEX 文件可供其他人使用

Posted

技术标签:

【中文标题】如何使 Coder 工具包创建的 MEX 文件可供其他人使用【英文标题】:How can I make MEX files created by the Coder toolkit usable by others 【发布时间】:2014-11-06 19:18:04 【问题描述】:

我使用 MATLAB 的 Coder 工具包创建了一个 MEX 文件,它在我的计算机上运行良好,但是,当我将它发送给其他人使用时,它出错并且无法运行。

正确分发和允许其他人使用我的 MEX 文件/代码的正确步骤是什么?

附带说明,(我不确定这对我的问题有多大影响)但是在编码器创建的 C 代码文件中,它具有指向我计算机上的目录的变量,而不是具有相对路径。

【问题讨论】:

您是给他们编译后的 MEX 文件还是源 C 代码? MEX 文件是二进制共享库,必须在目标平台上编译才能生成正确的可执行文件(Windows、Linux、OSX) 如何生成 MEX 以及尝试在另一台计算机上运行它时收到什么错误消息?通常,除了生成的 MEX 文件(我认为)之外,您不需要任何其他内容,但您可能应该在分发 MEX 文件之前解决目录问题。但是,正如@Amro 指出的那样,您只能在 MATLAB 中使用 MEX 文件,因此客户端计算机必须安装 MATLAB。 你的机器和你同事的机器的架构是一样的吗?对于 MATLAB Coder 生成的 MEX 文件,您的同事使用的 MATLAB 版本应至少与用于生成 MEX 文件的版本一样新。遇到的显式错误也会非常有帮助。 【参考方案1】:

安装MCR(我最初的建议)仅适用于编译器生成的代码,尽管您仍然需要兼容的 libmx 和 libmat。我想也许他们可以通过安装程序来获取它们,但如果 MATLAB 不兼容(v6 与 v7),他们真的需要更新它。

一般来说,避免部署代码中的路径。

【讨论】:

OP 使用的是 MATLAB Coder 而不是 MATLAB Compiler。 Coder 创建不依赖于 MCR 的 C/C++ 源代码。 @Amro 它仍然至少需要 libmx 和 libmat 共享库。 (在这种情况下,我现在想起来我的答案仍然是错误的)。虽然功能本身肯定是独立的...... 好的,但是您不能在 MATLAB 之外运行 MEX 函数。 MCR 仅用于在 MATLAB 不可用的情况下运行已部署(认为已打包)的应用程序。显然,如果没有必要的 MX/MEX 库,您就无法拥有 MEX 文件。 @Amro 关于 MCR 是对的,但我在想库依赖项......我同意这个糟糕的解决方案。 MathWorks 在某种程度上维护了 MEX/MX 库的二进制 ABI compatibility(至少是公开公开的函数),这就是为什么您可以从旧版本编译 MEX 函数并且仍然会无需重新编译即可在较新的 MATLAB 版本中工作(当然假设相同的平台,Windows/Linux/Mac)。我认为他们破坏兼容性的一次是当他们从 MATLAB v6 迁移到 MATLAB v7 时,需要重新编译 MEX 文件

以上是关于如何使 Coder 工具包创建的 MEX 文件可供其他人使用的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB Coder:稀疏矩阵

MATLAB Coder 函数在 2014a 中未定义

Matlab Coder生成的C代码的自动微分[关闭]

如何在 Matlab Coder 中为具有不同输入数量的函数定义输入类型?

如何在 C++ 中使用 mex.h

即使输入位置不存在,如何使 Geo::Coder::Google 运行