我使用 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库。
如有任何帮助,我们将不胜感激
[...] 与标头链接的其他 C 文件。 [...]
头文件不链接 C 文件 - 它们只是声明符号。当链接器无法匹配要求链接的代码中引用的符号时,您会得到“未定义的符号”。最可能的原因是您尚未实际链接编译器编译的每个 C 文件的目标代码。 也就是说,每个C文件都必须单独编译以创建目标文件。此过程中标头的目的是使
编译器能够看到将在单独的目标文件中定义的符号。 单独编译生成的目标文件然后传递到
链接器,该链接器使用其他目标文件(或链接中包含的静态库)中提供的定义来解析一个目标文件中的外部引用。 它是链接器发出未定义的符号诊断,几乎可以肯定是因为您没有单独编译 C 文件并将生成的目标代码传递给链接器。
在大多数 IDE 中(我不认为 MPLAB X 有什么不同),您将 C 源文件添加到“
project”中,IDE 的项目管理器将为您管理单独的编译和链接。因此,您很可能只是忽略了将 C 源代码添加到您的项目中。无论包含多少头文件都无法解决此问题,头文件由预处理器包含(在编译和链接之前)。