报错信息: Error: L6200E: Symbol i multiply defined (by key.o and timer.o).
时间: 2023-10-22 15:43:47 浏览: 871
这个错误信息表示符号 i 被 key.o 和 timer.o 两个目标文件重复定义。这通常是由于在多个源文件中同时定义了相同的全局变量或函数所导致的。
解决方法:
1. 检查代码中是否存在多个重复定义的全局变量或函数,如果有,将其改为静态变量或函数。
2. 如果全局变量或函数确实需要在不同的源文件中使用,则可以将它们的定义放在一个单独的源文件中,并将其编译成一个目标文件,然后在需要使用它们的源文件中包含该目标文件即可。例如,可以将全局变量或函数的定义放在一个名为 common.c 的源文件中,然后在 key.c 和 timer.c 中包含 common.c 的目标文件,例如 common.o。
3. 如果您使用的是 ARM Keil MDK 开发工具,可以在工程选项中启用“--keep"选项,以保留重复的符号定义。但这种方法并不推荐,因为它只是避免了链接错误,而不是解决问题的根本原因。
希望这些信息能对您有所帮助。
相关问题
..\OBJ\05_class_one.axf: Error: L6200E: Symbol kp multiply defined (by pid.o and main.o). ..\OBJ\05_class_one.axf: Error: L6200E: Symbol ki multiply defined (by pid.o and main.o). ..\OBJ\05_class_one.axf: Error: L6200E: Symbol kd multiply defined (by pid.o and main.o). ..\OBJ\05_class_one.axf: Error: L6200E: Symbol error multiply defined (by pid.o and main.o). ..\OBJ\05_class_one.axf: Error: L6200E: Symbol last_error multiply defined (by pid.o and main.o). ..\OBJ\05_class_one.axf: Error: L6200E: Symbol add_error multiply defined (by pid.o and main.o). ..\OBJ\05_class_one.axf: Error: L6200E: Symbol dy_error multiply defined (by pid.o and main.o). ..\OBJ\05_class_one.axf: Error: L6200E: Symbol pid_out multiply defined (by pid.o and main.o). Not enough information to list image symbols. Not enough information to list load addresses in the image map.
这些错误是由于在 'pid.o' 和 'main.o' 文件中同时定义了 'kp'、'ki'、'kd'、'error'、'last_error'、'add_error'、'dy_error' 和 'pid_out' 这些符号导致的。这种重复定义会导致链接时的冲突。要解决这个问题,你需要确保这些符号只在一个文件中定义。你可以检查一下这些文件,看看是否有重复定义的地方,并将其中一处定义删除或修改。
..\OBJ\TIMER.axf: Error: L6200E: Symbol count multiply defined (by timer.o and main.o).
这个错误提示表明在链接时,`timer.o` 和 `main.o` 中都定义了同名的符号,导致符号重复。这通常是因为在多个源文件中都定义了同名的全局变量或函数。
你需要检查一下代码,确保没有重复定义同名的全局变量或函数。如果确实需要在多个源文件中使用同名的全局变量或函数,你可以将它们定义为 `static`,这样它们就只在当前源文件中可见,不会导致符号重复。
阅读全文