10

在 C C++ 中调用 matlab 和在 matlab 中调用 C C++ 似乎有几种方法。当我尝试在这里列出它们时,如果我错过了什么,请指出。

在matlab中调用C C++,也有两种方法。第一个是调用 C 共享库中的函数。第二个是将 C C++ 代码构建成二进制 MEX 文件,该文件将从 MATLAB 命令行调用。对于第一种方法,C 共享库是否只是通用库,即没有更改其用于 matlab 的 C 代码并从 gcc 等通用 C 编译器编译?

要在 C C++ 中调用 matlab 代码,有两种方法可用。第一个是Matlab引擎。第二种是使用 MATLAB Compiler mcc 从您的 MATLAB 代码创建 C 或 C++ 共享库。

此外,matlab 和 C C++ 可以通过在某些文件(例如 mat 文件、文本文件)中写入和读取数据来进行通信。

这里有不止一种方法来实现每个目标,你能告诉我哪些案例最适合使用它们中的哪一个吗?即调用 C 共享库中的函数 VS 将 C C++ 代码构建成二进制 MEX 文件,Matlab 引擎 VS 将 Matlab 代码编译成 C C++ 共享库。

谢谢并恭祝安康!

4

2 回答 2

8

我只有从 MATLAB 调用 C 或 C++ 函数的经验。在我看来,在共享库中调用函数和从 MEX 文件中调用函数之间的唯一区别是,对于共享库,您必须使用命令行类型函数“calllib”调用函数,并且 MEX 函数允许您可以像调用内置函数一样调用函数,以便界面更简洁。

我的建议是使用 MEX 文件,如果

  • 您正在使用 C++(您可能必须编写一个包装器才能在共享库中使用 C++)
  • 您正在使用 MATLAB 作为大量优化 C 或 C++ 例程的粘合剂。您将希望能够干净地调用它们。

使用共享库,如果

  • 您已经拥有一个无需修改即可使用的现有 C 库。
  • 您只需要少量调用 C 函数。

真的,它归结为界面。我个人更喜欢 MEX 文件路径,因为它提供了从 MATLAB 到 C 或 C++ 函数的最干净的接口。您可以像使用标准 MATLAB 类型的另一个函数一样调用它。使用共享库,您可能需要在调用库函数之前进行一些数据格式化

于 2009-10-16T15:18:24.773 回答
3

我认为您命名的方法是正确的(我已经有一段时间没有使用它们了)

matlab C 编译器并不特别。可以使用不同的编译器。请参阅支持的编译器的链接列表。这不包括 gcc,但包括 MS Visual Studio。与提供的库链接时会遇到问题。

基本上:如果你需要一个紧凑的接口,你会从 C 调用 matlab;例如,如果您想同步 2 个工具,或者您的 S-Function (simulink) 需要其他信息。但是,这样的文件可能首先由 Matlab/simulink 调用。

如果您编写自己的 S-Function 或对 matlab 的扩展,则从 matlab 调用 c 是您想要做的。

C 和 C++ 之间的选择是你的;如果你从一张白纸开始,我建议你使用 C++;您不需要使用完整的功能,但它允许更多的自由。现在也有更多的库可用于 C++。

如果您需要迁移到非常不同的环境,C 是首选语言;例如,将 C 编译为 DSP。或者,如果您有 C 中的遗留代码开始。混合 C 和 C++ 是可能的,但 a 可能有点麻烦;我相信你会在 StackOverflow 上找到关于这个主题的主题。

于 2009-10-16T09:46:29.943 回答