我刚刚开始使用Segger Embedded Studio。现在正在尝试调用包含的头文件的函数。该文件似乎包括在内,因为它显示在依赖项中。现在,我只是在项目目录中包含了头文件和C-File。

包含的头文件和C文件很简单:
//##### Header-File ######
#ifndef TEST_H_
#define TEST_H_
void printText(void);
#endif //TEST_H_和:
//###### C-File #########
#include <test.h>
#include <stdio.h>
#include <stdlib.h>
void printText(void)
{
printf("Hello");
}但是,当我尝试在main中调用printText函数时,我得到了错误:“未定义的符号: printText”。为什么函数不被识别?
发布于 2021-05-22 20:18:13
"Undefined symbol“是链接器错误。您没有链接包含printText()定义的目标代码。
这不是头文件的问题;包括头文件并不会链接相关的代码-这只是一个声明,因此编译器知道接口是什么样子的。它是将单独编译的目标代码组合在一起形成程序的链接器。您没有告诉链接器使用包含printText()的对象代码,也没有告诉您的集成开发环境项目编译它以生成该对象代码。
项目树清楚地显示您的项目中只包含main.c;您还需要添加包含printText()的C文件。
在这里,您需要掌握separate compilation and linking的概念。
发布于 2021-05-23 21:27:27
谢谢Clifford的回答。你是对的,我有一些错误的概念,在构建项目时,哪些文件将被链接。在segger嵌入式studio的特殊情况下,据我所知,有两种方法可以引用外部文件。
https://stackoverflow.com/questions/67649288
复制相似问题