【问题标题】:Include Files in Segger Embedded Studio在 Segger Embedded Studio 中包含文件
【发布时间】:2021-05-22 12:09:13
【问题描述】:

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

包含的头文件和 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”。 为什么无法识别功能?

【问题讨论】:

    标签: c include


    【解决方案1】:

    Undefined symbol”是链接器错误。您没有链接包含printText()定义的目标代码。

    头文件不是问题;包含头文件不会导致关联的代码被链接——这只是声明,因此编译器知道接口是什么样的。它是将单独编译的目标代码组合成一个程序的链接器。您没有告诉链接器使用包含printText() 的目标代码,也没有告诉您的 IDE 项目编译它以生成该目标代码。

    项目树清楚地显示您的项目中只包含 main.c;你还需要添加包含printText()的C文件。

    separate compilation and linking的概念是你这里需要掌握的。

    【讨论】:

      【解决方案2】:

      感谢克利福德的回答。没错,我对构建项目时将链接哪些文件有一些误解。在 segger 嵌入式工作室的特殊情况下,据我所知,有两种方法可以引用外部文件。

      1. 将文件添加到源文件文件夹很简单,但必须为要使用相应文件的每个项目单独完成。
      2. 对于经常使用的文件,创建一个专用的库解决方案是有益的。然后可以通过选择“添加现有项目”将此类库导入任何解决方案。这会将库的所有文件添加到您当前的解决方案中(并在项目树中显示它们)。现在单击选项卡项目-> 依赖项。你的图书馆应该出现在这里。通过激活该复选框,链接器将在构建您的解决方案时编译引用的项目,从而允许使用您的库函数。

      Adding and linking library-project to a current solution

      【讨论】:

        猜你喜欢
        • 2020-06-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多