问题 matlab中的C ++ C ++和C ++中的matlab [关闭]


似乎有几种方法可以在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 ++共享库。

感谢致敬!


5102
2017-10-16 08:39


起源

没有一种叫做C / C ++的语言。 C和X之间的接口比C ++和X之间的接口要容易得多。 - Chris Lutz
你知道我的意思,“C和/或C ++” - Tim
C答案将比C ++答案短很多(在某些情况下,C ++答案将是“用C语言写包装”)。你更关心哪一个? - Chris Lutz
我想听听你对C或C ++或两者的看法。谢谢! - Tim


答案:


我只能从MATLAB中调用C或C ++函数。在我看来,在共享库中调用函数和从MEX文件调用函数之间的唯一区别是,使用共享库,您必须使用'calllib'调用该函数,这是一个命令行类型函数,MEX函数允许您可以将函数调用为内置函数,以便界面更清晰。

我的建议是使用MEX文件

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

如果使用共享库

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

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


8
2017-10-16 15:18





我认为你命名的方法是正确的(自从我使用它们以来已经有一段时间了)

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

基本上:如果你需要一个紧密的界面,从C调用matlab就是你要做的事情。例如,如果要同步2个工具,或者您的S功能(simulink)需要其他信息。但是,这样的文件首先由Matlab / simulink调用。

如果您编写自己的S函数或matlab扩展,那么从matlab调用c就是您想要做的。

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

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


3
2017-10-16 09:46