【发布时间】:2015-07-15 09:14:00
【问题描述】:
我正在尝试在 Qt Creator 上使用 Matlab Coder 生成的 C 代码。但是,每当我尝试构建我的项目时,都会收到未定义的引用错误。
以下是有关设置的一些详细信息:
- 我在 MATLAB Coder 设置中将硬件设置为 Generic、32 位 x86 兼容。标准数学库设置为 C99(ISO),代码替换为无。
- 我的 Qt Creator 在 Ubuntu 虚拟机上。这意味着我在 Windows 上生成 C 代码,然后将文件复制到 VM。
- 在 Qt Creator 中,我使用“添加现有文件...”选项来导入 MATLAB Coder 生成的 .h 和 .c 文件。 .pro 会自动填充添加的文件。
- 在 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