MPLAB X XC8 错误:(500) 未定义符号

问题描述 投票:0回答:2

我使用 MPLAB X v5.25 和 XC8 v2.10

构建代码时,我遇到一个错误,提示错误:(500) 未定义的符号 并枚举与标头链接的其他 C 文件中包含的某些函数。

*:0:: 错误:(500) 未定义的符号:
    _OneWireTemp(分布/默认/生产 irstpic.X.生产.o)
    _发送(dist/默认/生产irstpic.X.生产.o)
    _USART_Init(dist/默认/生产irstpic.X.生产.o)
(908) 退出状态 = 1*

函数来自one-wire库、HTTP GPRS库和USART库。

如有任何帮助,我们将不胜感激

embedded mplab xc8
2个回答
0
投票

[...] 与标头链接的其他 C 文件。 [...]

头文件不链接 C 文件 - 它们只是声明符号。当链接器无法匹配要求链接的代码中引用的符号时,您会得到“未定义的符号”。最可能的原因是您尚未实际链接编译器编译的每个 C 文件的目标代码。 也就是说,每个C文件都必须单独编译以创建目标文件。此过程中标头的目的是使

编译器

能够看到将在单独的目标文件中定义的符号。 单独编译生成的目标文件然后传递到

链接器

,该链接器使用其他目标文件(或链接中包含的静态库)中提供的定义来解析一个目标文件中的外部引用。 它是链接器发出未定义的符号诊断,几乎可以肯定是因为您没有单独编译 C 文件并将生成的目标代码传递给链接器。

在大多数 IDE 中(我不认为 MPLAB X 有什么不同),您将 C 源文件添加到“

project

”中,IDE 的项目管理器将为您管理单独的编译和链接。因此,您很可能只是忽略了将 C 源代码添加到您的项目中。无论包含多少头文件都无法解决此问题,头文件由预处理器包含(编译和链接之前)。


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.