【问题标题】:Call C++ class member functions in a static library from MATLAB从 MATLAB 调用静态库中的 C++ 类成员函数
【发布时间】:2014-11-17 12:13:18
【问题描述】:

我有一个 C++ 头文件和相应的静态库(.lib 文件)。没有源文件。 代码包含几个类,每个类都有自己的功能。

我希望能够从 MATLAB 中调用这些函数。

有人能帮我指出正确的方向吗?示例将不胜感激。

谢谢。

编辑:编写一个 DLL 作为静态库和 MATLAB 之间的接口是个好主意吗?然后我可以从 DLL 访问我的静态库中的函数,并使用 calllib 从 MATLAB 访问 DLL。 如果是这样,我将如何从 DLL 调用静态库中的类成员函数?

更新 因此,我决定编写一个 DLL,将静态库链接到该 DLL 并使用 calllib 从 MATLAB 调用函数 问题是,静态库已经编译,我没有源代码。我尝试链接 .lib 文件(可能是使用 Visual Studio 构建的)并使用 MINGW32 构建我的 DLL,但这可能由于 (lack of?) interoperability of libraries created by different compilers. 而无法工作 这是我用来链接的 MinGW 命令:g++ -c -o -DBUILDING_INTERMEDIATE_DLL intermediate_dll.cpp -TaccClient.lib

intermediate_dll.cpp 是我的 DLL 的源文件,TaccClient.lib 是我正在使用的静态库。

是否有人对这如何工作有任何建议,或者我是否需要等待并稍后在 Visual Studio 上尝试?

【问题讨论】:

  • 看看calllib。您可能需要一个包装器来调用类函数。
  • @Naveh 是 calllib 不仅用于共享库吗?我只有一个静态库和相应的头文件 - 没有源文件。
  • 您的 DLL 方法与此处讨论的人们相同 :) mathworks.com/matlabcentral/answers/… 此处为 stackoverflow.com/questions/24704251/… 示例
  • @AliHaroon 是的,我真傻 :P 然后使用 mex 方法
  • 感谢您的建议!我正在编写一个 DLL,我将链接静态库并通过使用 calllib 从 MATLAB 调用函数

标签: c++ matlab static-libraries


【解决方案1】:

MATLAB 提供 MATLAB 编码器功能,允许您从 C/C++ 源文件和库文件创建 MEX 文件。在为您的应用程序构建 MEX 文件时,还可以选择调用 C 共享库。我已经使用 SIMULINK(带有 SIMULINK Coder)和 Embedded Coder 来进行我的库链接,它可以帮助您通过 GUI 来完成它,非常整洁。但是,只要您有受支持的 C/C++ 编译器,您仍然可以使用 MATLAB 来执行此操作。

使用 C 共享库选项,您应该能够加载、调用、查看库和函数。有关其他可用功能的更多详细信息,请参阅 - http://uk.mathworks.com/help/matlab/using-c-shared-library-functions-in-matlab-.html

here 回答了类似的问题。你会觉得它有用吗?

【讨论】:

  • 很遗憾我没有源文件。我只有静态库和头文件。我确实遇到过这个问题,但没有发现它特别有用,因为我缺少源文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多