MPLAB X XC8 Error: (500) Undefined Symbols

MPLAB X XC8 Error: (500) Undefined Symbols

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

在构建我的代码时,我遇到了一条错误消息:(500) 未定义的符号 并枚举包含在与 headers.

链接的其他 C 文件中的某些函数
*:0:: error: (500) undefined symbols:
    _OneWireTemp(dist/default/production\firstpic.X.production.o)
    _sending(dist/default/production\firstpic.X.production.o)
    _USART_Init(dist/default/production\firstpic.X.production.o) 
(908) exit status = 1*

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

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

[...] other C files linked with headers. [...]

Header 文件没有 link C 文件——它们只是声明符号。当 linker 无法匹配代码中引用的符号时,您会得到 undefined symbols link。最可能的原因是您实际上没有 link 编辑编译器编译的每个 C 文件的 object 代码。

也就是说,每个C文件都要单独编译生成一个object文件。此过程中 header 的目的是使 编译器可见 将在单独的 object 文件中定义的符号。

单独编译生成的object文件再传给linker解析外部引用在一个object文件中使用其他 object 文件(或 link 中包含的静态库)中提供的定义。

发出未定义符号诊断的是 linker,几乎可以肯定是因为您没有单独编译 C 文件并将生成的 object 代码传递给 link呃

在大多数 IDE 中(我认为 MPLAB X 没有任何不同),您将 C 源文件添加到“项目”,并且IDE 的项目经理将为您管理单独的编译和 linking。因此,您很可能只是忽略了将 C 源代码添加到您的项目中。 header 文件包含的数量无法解决此问题,header 文件包含在 pre-processor(before 编译和 linking).