【问题标题】:Using Matlab Coder generated C files on Qt Creator在 Qt Creator 上使用 Matlab Coder 生成的 C 文件
【发布时间】:2015-07-15 09:14:00
【问题描述】:

我正在尝试在 Qt Creator 上使用 Matlab Coder 生成的 C 代码。但是,每当我尝试构建我的项目时,都会收到未定义的引用错误。

以下是有关设置的一些详细信息:

  1. 我在 MATLAB Coder 设置中将硬件设置为 Generic、32 位 x86 兼容。标准数学库设置为 C99(ISO),代码替换为无。
  2. 我的 Qt Creator 在 Ubuntu 虚拟机上。这意味着我在 Windows 上生成 C 代码,然后将文件复制到 VM。
  3. 在 Qt Creator 中,我使用“添加现有文件...”选项来导入 MATLAB Coder 生成的 .h 和 .c 文件。 .pro 会自动填充添加的文件。
  4. 在 main 函数中,我已包含 (#include) 我要使用的函数所需的 .h 文件。

如果有帮助,这里是设置的快照。 “ml.h”是 MATLAB 生成的头文件之一。该头文件中事物的定义在“ml.c”中。 screenshot

可能是什么问题? TIA :)

【问题讨论】:

  • 函数emxCreateND_uint8_T 是否在生成的文件之一中实现?我还猜想您需要使用 C 编译器而不是 C++ 编译器。将 main.cpp 重命名为 main.c。您可以使用 CMake 为您创建 makefile。
  • 你的 ml.c 有一个 .c 扩展名,所以可能是在 C 模式下编译的。在 C++ 模式下编译 main.cpp 时,它不会检测 C 符号,除非您在 ml.h 中使用 extern "C"。您可以:1)将 main 更改为 .c,以便一切都在 C 中,2)或强制编译器也在 C++ 模式下编译 .c 文件,因此一切都在 C++ 中,3)或使用 extern "C" 并混合 C 和 C++在链接时。
  • 要告诉 MATLAB Coder 生成 C++ 代码,您可以使用:cfg = coder.config('lib'); cfg.TargetLang = 'C++'; codegen -config cfg ...。此外,请确保您在项目中拥有所有生成的文件。 The documentation 展示了如何将生成的代码和依赖项打包到 ZIP 文件中。
  • 非常感谢您的回复 :) 我尝试将 main.cpp 转换为 C 文件,并且成功了。但是,我还需要一些 C++ 库,因此我选择了 MATLAB coder 以将 C++ 作为目标语言。我想我错过了那个选项。

标签: matlab qt matlab-coder


【解决方案1】:

我认为您正在正确构建它,但您似乎缺少所需的 emxAPI 头文件。在您的构建目录(可能是子目录)中查找应该命名为 ml_emxAPI.h 的内容和另一个 ml_emxutil.h 文件(以及它们相应的 c 文件,如果您不制作 lib)。包括 API 标头,这应该可以让您访问 emxCreateND_uint8 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多