在 Zephyr 项目编译过程中,遇到了以下错误:

FAILED: zephyr/zephyr_pre0.elf zephyr/zephyr_pre0.map D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/zephyr_pre0.map
cmd.exe /C "cd . && C:\Users\NineDay\zephyr-sdk-0.16.0\riscv64-zephyr-elf\bin\riscv64-zephyr-elf-gcc.exe  -gdwarf-4 zephyr/CMakeFiles/zephyr_pre0.dir/misc/empty_file.c.obj -o zephyr\zephyr_pre0.elf  zephyr/CMakeFiles/offsets.dir/./arch/riscv/core/offsets/offsets.c.obj  -fuse-ld=bfd  -Wl,-T  zephyr/linker_zephyr_pre0.cmd  -Wl,-Map=D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/zephyr_pre0.map  -Wl,--whole-archive  app/libapp.a  zephyr/libzephyr.a  zephyr/arch/common/libarch__common.a  zephyr/arch/arch/riscv/core/libarch__riscv__core.a  zephyr/lib/libc/newlib/liblib__libc__newlib.a  zephyr/drivers/interrupt_controller/libdrivers__interrupt_controller.a  zephyr/drivers/clock_control/libdrivers__clock_control.a  zephyr/drivers/console/libdrivers__console.a  zephyr/drivers/flash/libdrivers__flash.a  zephyr/drivers/gpio/libdrivers__gpio.a  zephyr/drivers/i2c/libdrivers__i2c.a  zephyr/drivers/pinctrl/libdrivers__pinctrl.a  zephyr/drivers/sensor/mpu9250/libdrivers__sensor__mpu9250.a  zephyr/drivers/serial/libdrivers__serial.a  zephyr/drivers/timer/libdrivers__timer.a  -Wl,--no-whole-archive  zephyr/kernel/libkernel.a  -L"c:/users/nineday/zephyr-sdk-0.16.0/riscv64-zephyr-elf/bin/../lib/gcc/riscv64-zephyr-elf/12.2.0"  -LD:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr  -lgcc  zephyr/arch/common/libisr_tables.a  -mabi=ilp32  -march=rv32imc_zicsr  -Wl,--gc-sections  -Wl,--build-id=none  -Wl,--sort-common=descending  -Wl,--sort-section=alignment  -Wl,-u,_OffsetAbsSyms  -Wl,-u,_ConfigAbsSyms  -nostdlib  -static  -Wl,-X  -Wl,-N  -Wl,--orphan-handling=warn  -Wl,-no-pie  -lm  -Wl,-lc  -L"C:/Users/NineDay/zephyr-sdk-0.16.0/riscv64-zephyr-elf/riscv64-zephyr-elf"/lib/.  -u_printf_float  -Wl,-lgcc  -lc  -lgcc  -specs=nano.specs  -TC:/Users/NineDay/zephyrproject/modules/hal/espressif/zephyr/esp32c3/src/linker/esp32c3.rom.alias.ld  -TC:/Users/NineDay/zephyrproject/modules/hal/espressif/zephyr/esp32c3/../../components/esp_rom/esp32c3/ld/esp32c3.rom.ld  -TC:/Users/NineDay/zephyrproject/modules/hal/espressif/zephyr/esp32c3/../../components/esp_rom/esp32c3/ld/esp32c3.rom.eco3.ld  -TC:/Users/NineDay/zephyrproject/modules/hal/espressif/zephyr/esp32c3/../../components/esp_rom/esp32c3/ld/esp32c3.rom.api.ld  -TC:/Users/NineDay/zephyrproject/modules/hal/espressif/zephyr/esp32c3/../../components/esp_rom/esp32c3/ld/esp32c3.rom.libgcc.ld  -TC:/Users/NineDay/zephyrproject/modules/hal/espressif/zephyr/esp32c3/../../components/soc/esp32c3/ld/esp32c3.peripherals.ld && cmd.exe /C "cd /D D:\0Document\HeadTracker\HeadTracker_ESP32\headtracker\build\zephyr && "C:\Program Files\CMake\bin\cmake.exe" -E echo ""
c:/users/nineday/zephyr-sdk-0.16.0/riscv64-zephyr-elf/bin/../lib/gcc/riscv64-zephyr-elf/12.2.0/../../../../riscv64-zephyr-elf/bin/ld.bfd.exe: app/libapp.a(imu.c.obj): in function 'k_sem_give':
        D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/include/generated/syscalls/kernel.h:1089: multiple definition of 'pressButton'; app/libapp.a(application.c.obj):D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/include/generated/syscalls/kernel.h:1089: first defined here
c:/users/nineday/zephyr-sdk-0.16.0/riscv64-zephyr-elf/bin/../lib/gcc/riscv64-zephyr-elf/12.2.0/../../../../riscv64-zephyr-elf/bin/ld.bfd.exe: app/libapp.a(imu.c.obj): in function 'wasButtonPressed':
  D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/src/io.h:15: multiple definition of 'wasButtonPressed'; app/libapp.a(application.c.obj):D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/src/io.h:15: first defined here
c:/users/nineday/zephyr-sdk-0.16.0/riscv64-zephyr-elf/bin/../lib/gcc/riscv64-zephyr-elf/12.2.0/../../../../riscv64-zephyr-elf/bin/ld.bfd.exe: app/libapp.a(io.c.obj): in function 'k_sem_give':
D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/include/generated/syscalls/kernel.h:1089: multiple definition of 'pressButton'; app/libapp.a(application.c.obj):D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/build/zephyr/include/generated/syscalls/kernel.h:1089: first defined here
c:/users/nineday/zephyr-sdk-0.16.0/riscv64-zephyr-elf/bin/../lib/gcc/riscv64-zephyr-elf/12.2.0/../../../../riscv64-zephyr-elf/bin/ld.bfd.exe: app/libapp.a(io.c.obj): in function 'wasButtonPressed':
   D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/src/io.h:15: multiple definition of 'wasButtonPressed'; app/libapp.a(application.c.obj):D:/0Document/HeadTracker/HeadTracker_ESP32/headtracker/src/io.h:15: first defined here
collect2.exe: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

这个错误是链接器(ld)报告的,它表示在链接时出现重复定义的符号(函数、变量等),这是因为同一个符号在多个目标文件中定义了多次。

具体来说,这个错误是因为在imu.cio.capplication.c中都定义了pressButtonwasButtonPressed这两个函数,导致链接器无法确定使用哪个定义。

你需要在其中一个文件中将这些函数的定义删除或修改函数名,以解决这个问题。

另外,你的编译命令似乎很长,不太容易看出问题所在。你可以尝试使用更简单的命令来编译,或者使用类似于Makefile的构建系统来管理编译过程。

解决 Zephyr 编译错误:重复定义符号 'pressButton' 和 'wasButtonPressed'

原文地址: https://www.cveoy.top/t/topic/n37N 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录