从 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++ 代码时遇到问题