【问题标题】:How to use C code generated by Matlab?如何使用 Matlab 生成的 C 代码?
【发布时间】:2016-03-25 15:29:53
【问题描述】:

我使用 Matlab Coder 为一个简单的 Matlab 数组添加函数生成 C 代码,该函数添加两个数组的元素。完成后,Matlab Coder 会给我一个包含 .c 和头文件的包(其中还包括函数本身的 C 文件)。

  1. 如何使用这些 C 文件,例如Dev C++ 或 Code::Blocks 之类的程序?

  2. 如何初始化 emxArray_real_T 变量以合并整数数组的元素?

【问题讨论】:

  • 它们是 C++ 函数还是 C 语言函数? (C++ 语言函数可以被覆盖和重载,C 没有这个能力。)
  • 我上周做了。只需从您的 IDE 创建一个空项目,导入所有文件(包括主要示例),编译并运行。就是这样!
  • 文件是C文件。我确实有 Dev-C++,但是每当我尝试编译主文件(由 Matlab 本身给出)时,它都会给我链接器错误说:“未定义对 emxCreateND_real_T' " or " undefined reference to emxInitArray_real_T' 的引用”
  • 另外,当我创建一个新的空项目时,导入包括主要示例文件在内的所有文件,我收到一条错误消息“mingw32-make.exe: *** No rule to make target 'Untitled3 .o','Project2.exe' 需要。停止。”
  • C 不是 C++ 不是 C!

标签: c matlab dev-c++ matlab-coder


【解决方案1】:

如果你有一个支持 c 的 IDE,比如 Dev C++ 或 Code Blocks,你只需要用那个 IDE 打开文件,编译并运行它。对于代码块,按 F9 编译并运行您的代码。

编辑:undefined reference to emxInitArray_real_T 错误是由于链接错误。您可以制作定制的 MakeFile 并在其中选择它(对于 CodeBlocks:Project->properties->Project setting)。试试这个:

CC=g++
CFLAGS=  -g
OBJECTS= main.o
LIBS = -Llibs -lMat

# --- targets
all:    main
main:   $(OBJECTS)
        $(CC)  -o main $(OBJECTS) $(LIBS)

main.o: main.cpp
        $(CC) $(CFLAGS) -Ilibs -c main.cpp

编辑 2:对于 Dev C++:

1 - 使用 File >> New Project 创建一个新项目。如果您使用自定义生成文件,则可以忽略 C/C++ 选项。此外,一个空项目也可以。

2 - 使用 Project >> Add to Project 或顶部工具栏中间的“+”号将源文件和头文件添加到新项目。

3 - 转到项目 >> 项目选项 (Alt+P) >> Makefile 并勾选“使用自定义 makefile”选项。然后将 Dev-C++ 指向下面的自定义 makefile。

,正如this post 中所指出的那样。

【讨论】:

  • 我确实有 Dev-C++,但每当我尝试编译主文件(由 Matlab 本身给出)时,它会给我链接器错误说:“未定义对 emxCreateND_real_T' " or " undefined reference to emxInitArray_real_T' 的引用”
  • 谢谢。它说“成功生成所有二进制输出”……但我还有一个问题。如果我想调用编译后的函数(说它的声明是 Func1(int x, int y) ),我现在如何在新的 C 文件中调用它?
猜你喜欢
  • 2016-08-30
  • 2011-09-17
  • 2021-05-13
  • 2017-07-06
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多