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

Embedded MPLAB X XC8错误:(500)未定义的符号,embedded,mplab,xc8,Embedded,Mplab,Xc8,Im使用MPLAB X v5.25和XC8 v2.10 在构建代码时,我遇到一个错误,上面写着错误:(500)未定义的符号 并枚举与头链接的其他C文件中包含的某些函数 *:0:: error: (500) undefined symbols: _OneWireTemp(dist/default/production\firstpic.X.production.o) _sending(dist/default/production\firstpic.X.production.o)

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

在构建代码时,我遇到一个错误,上面写着错误:(500)未定义的符号 并枚举与头链接的其他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* *:0::错误:(500)未定义的符号: _OneWireTemp(dist/default/production\firstpic.X.production.o) _发送(dist/default/production\firstpic.X.production.o) _USART_Init(dist/default/production\firstpic.X.production.o) (908)退出状态=1* 这些功能来自单线库、HTTP GPRS库和USART库

任何帮助都将不胜感激

[…]与标题链接的其他C文件。[……]

头文件不链接C文件-它们只是声明符号。当链接器无法匹配要求其链接的代码中引用的符号时,将获得未定义的符号。最可能的原因是您没有实际链接编译器编译的每个C文件的目标代码

也就是说,每个C文件必须单独编译以创建一个对象文件。此过程中标题的目的是使编译器可以看到将在单独的对象文件中定义的符号

然后,通过单独编译生成的对象文件将传递给链接器,链接器使用其他对象文件(或链接中包含的静态库)中提供的定义解析一个对象文件中的外部引用

是链接器发出未定义的诊断符号,这几乎可以肯定,因为您没有单独编译C文件并将生成的目标代码传递给链接器


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

发布完整的构建日志-它将包含重要的诊断信息,如编译器和链接器调用,以便我们可以看到构建的组成部分。很可能只有
firstpic.X.production.c
被编译和链接,而你却忽略了它引用的其他模块。是的,我是多么愚蠢,我不知道。我教我把它们都放在项目文件夹里。我通过ProjectExplorer添加了C文件,并尝试构建它。错误现在消失了。感谢you@Granger字体一点也不笨。在我的例子中,有问题的C文件包含在MPLab X项目配置中,但该配置必须以某种方式被破坏,从而无法实际构建C文件。从MPLab X项目配置中删除我的文件并将其添加回解决了此问题。该问题可能是由于使用MPLab X构建配置功能并将C文件添加到某个构建配置中引起的。