c - C C++ 中的 matlab 和 matlab 中的 C C++

标签 c matlab mex matlab-engine matlab-compiler

<分区>

C++中调用matlab和matlab中调用C C++好像有几种方法。当我尝试在此处列出它们时,如果我遗漏了什么,请指出。

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

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

除了 matlab 和 C,C++ 还可以通过向某些文件(例如 mat 文件、文本文件)写入和读取数据来进行通信。

有不止一种方法可以实现这里的每个目标,您能告诉我哪些情况最适合使用其中的哪一种吗?即在 C 共享库中调用函数 VS 将 C C++ 代码构建为二进制 MEX 文件,Matlab 引擎 VS 将 Matlab 代码编译为 C C++ 共享库。

感谢和问候!

最佳答案

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

我的建议是在以下情况下使用 MEX 文件

  • 您正在使用 C++(您可能必须编写包装器才能在共享库中使用 C++)
  • 您正在使用 MATLAB 作为大量优化 C 或 C++ 例程的粘合剂。你会希望能够干净利落地称呼他们。

在以下情况下使用共享库

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

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

关于c - C C++ 中的 matlab 和 matlab 中的 C C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1576876/

相关文章:

matlab - 如何在 MATLAB 中使用 2-D 掩码索引 3-D 矩阵?

matlab - 检测到事件后发出警报

c - 在 Matlab 中编译 mex 文件时找不到标准 C 库

matlab - 无法在 Windows 上编译 mex 文件

c - haskell FFI : Wrapping a C struct containing a separately allocated string (char*)

matlab - 如何使用 MATLAB 向 IP 地址的端口发送信号?

c++ - Lint 警告 与指针结合的算术表达式中的可疑截断

c - 试图避免切换

c - malloc/free() 带有错误信号 6

c - 代码块IDE中flushall的替代品是什么?