从 C 调用 MATLAB

Posted

技术标签:

【中文标题】从 C 调用 MATLAB【英文标题】:Calling MATLAB from C 【发布时间】:2010-01-18 11:19:01 【问题描述】:

我正在编写一个需要能够运行 MATLAB 命令的 Java 应用程序。为此,我使用了一个 C 程序,Java 应用程序可以调用它来与 MATLAB 交互。但是,即使在研究了 MATLAB 引擎之后,我似乎也无法弄清楚如何编译 C 程序。该文档似乎正在从 MATLAB 中编译 C 程序:http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_external/f39903.html。有没有办法从命令行编译?也就是说,我可以使用带有一些标志的 gcc 来包含所有相关的 MATLAB 支持(我通常不会用 C 编程,如果我的语言不完全正确,请见谅!)

谢谢!

【问题讨论】:

【参考方案1】:

您可以像编译普通 C 程序一样正常编译代码,但您需要正确指定依赖项。

最好的方法是将 CMake 实用程序与 CMakelists.txt 文件一起使用。现在,here 给出了如何编写 CMakeLists.txt 的演示,here 给出了如何将 C/C++ 与 Matlab 接口。希望对你有帮助....

【讨论】:

【参考方案2】:

也许你想做以下事情:

1) 从 matlab 命令行使用 matlab 编译器 mcc 编译您的 matlab 代码(即 m 文件)。 mcc 编译器生成 c dll 。 matlab 生成的 c dll 包含 matlab m 文件的 c 接口。有关如何从 matlab M 文件生成 c dll 的信息,请参见以下链接。 C Shared Library Target

2) 编写使用步骤1中生成的matlab dll的c dll。用c编译器编译c dll。有关如何调用matlab生成的dll中的函数,请参见以下链接 MATLAB Compiler Generated Interface Functions

3) 将步骤2中生成的c dll与java一起使用。

【讨论】:

如果你想使用独立的c exe而不是c dll,请参阅以下链接mathworks.com/access/helpdesk/help/toolbox/compiler/… 感谢您的链接!我会试试这个方法,看看我是否遇到任何问题。谢谢!【参考方案3】:

我不使用 MATLAB,但我猜你必须这样做:

    使用 MATLAB 库编译您的 C 程序,以创建 Java 可以使用的共享库。 编写一个调用您的共享库的 JNI 接口,确保链接到您的新 SO 以及您需要的所有来自 MATLAB 的 SO。

把问题分解成几个步骤,你就会解决它。

【讨论】:

我认为我想做的是拥有一个可执行的 C 程序。然后我的 Java 应用程序可以调用这个 C 程序并通过命令行传递参数。所以我需要步骤 (1) 的帮助,将 C 实际编译为可执行文件。

以上是关于从 C 调用 MATLAB的主要内容,如果未能解决你的问题,请参考以下文章

如何从 GTK+2 C 代码中调用 matlab/octave 函数

如何从 C 调用在 MATLAB 中创建并在 C 中编译的函数?

如何从 Matlab C API 调用 engClose() 并等待其进程关闭?

使用带有 MEX Wrapper 的辅助 C 文件从 MATLAB 2016 调用 C++ 代码时遇到问题

错误:mclmcr.h:没有这样的文件或目录从 C 调用 matlab 函数

从 Matlab 调用的 Mex 函数和数值差异