symbol delay_us multiply defined (by systick.o and mobebius.o)
时间: 2024-04-08 18:35:57 浏览: 58
这个问题通常是由于在编译过程中引入了重复的符号定义导致的。编译器在链接时会检测到多个相同符号的定义,从而报出这样的错误。
解决这个问题的一种常见方法是将重复定义的符号改为声明,以避免重复定义。在你的情况下,问题涉及到了 `delay_us` 这个符号,被 `systick.o` 和 `mobebius.o` 这两个目标文件同时定义了。
你可以尝试在 `systick.o` 或 `mobebius.o` 的源文件中找到 `delay_us` 的定义,并将其改为声明。具体来说,可以在头文件中声明 `delay_us`,然后在一个源文件中进行定义。这样,在链接时就只会有一个定义,解决了重复定义的问题。
另外,如果你使用的是 C 语言编译器,还可以考虑使用关键字 `static` 来限制符号的作用范围,从而避免重复定义。将 `delay_us` 定义为静态函数或变量,可以确保其只在当前源文件中可见。
如果以上方法没有解决问题,可能涉及到其他更复杂的情况,例如不同目标文件之间存在交叉引用等。这种情况下,你可能需要检查编译选项、链接脚本或者其他相关配置,以确保没有产生重复定义的情况。
相关问题
..\..\Output\zeng.axf: Error: L6200E: Symbol Delay_us multiply defined (by delay.o and bsp_systick.o).
这个错误是由于在编译过程中,两个不同的源文件都定义了同一个符号“Delay_us”,导致链接器无法确定使用哪个定义。解决这个问题的方法是需要在其中一个源文件中将该符号定义为static,这样就只能在该源文件中使用该符号,而不会与其他源文件中的定义冲突了。
解决方法:
在其中一个源文件中将该符号定义为static,例如在delay.c文件中将Delay_us函数定义为static即可。
..\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' 这些符号导致的。这种重复定义会导致链接时的冲突。要解决这个问题,你需要确保这些符号只在一个文件中定义。你可以检查一下这些文件,看看是否有重复定义的地方,并将其中一处定义删除或修改。
阅读全文