Im 使用 MPLAB X v5.25 和 XC8 v2.10
在构建代码时,我遇到一个错误,指出错误:(500( 未定义的符号 并枚举包含在与标头链接的其他 C 文件中的某些函数。
*:0:: 错误: (500( 未定义的符号: _OneWireTemp(dist/default/production\firstpic.X.生产.o( _sending(dist/default/production\firstpic.X.生产.o( _USART_Init(dist/default/production\firstpic.X.生产.o( (908( 退出状态 = 1*
函数来自单线库、HTTP GPRS 库和 USART 库。
任何帮助将不胜感激
[...] 其他与标头链接的 C 文件。[...]
头文件不链接C 文件 - 它们只是声明符号。 当链接器无法与要求链接的代码中引用的符号匹配时,将获得未定义的符号。 最可能的原因是您实际上没有链接编译器编译的每个 C 文件的目标代码。
也就是说,每个C文件必须单独编译才能创建一个目标文件。 此过程中标头的目的是使编译器可以看到将在单独的目标文件中定义的符号。
然后,通过单独编译生成的对象文件将传递到链接器,链接器使用其他对象文件(或链接中包含的静态库(中提供的定义解析一个对象文件中的外部引用。
是链接器发出未定义符号诊断,几乎可以肯定是因为您没有单独编译 C 文件并将生成的对象代码传递给链接器。
在大多数 IDE 中(我不相信 MPLAB X 有什么不同(,您将 C 源文件添加到">项目"中,IDE 的项目经理将为您管理单独的编译和链接。 因此,您可能只是省略了将 C 源添加到项目中。 再多的头文件包含也无法解决此问题,头文件包含在预处理器中(在编译和链接之前(。