如何修复 PlatformIO multiple definition of `WiFi' error

问题:

编译 PlatformIO 固件时,你看到类似这样的错误消息

linker_multiple_definition_error.txt
Linking .pio/build/d1_mini_lite/firmware.elf
/home/uli/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/10.3.0/../../../../xtensa-lx106-elf/bin/ld: .pio/build/d1_mini_lite/libbc0/libWiFi.a(WiFi.cpp.o):(.bss.WiFi+0x0): multiple definition of `WiFi'; .pio/build/d1_mini_lite/libd39/libESP8266WiFi.a(ESP8266WiFi.cpp.o):(.bss.WiFi+0x0): first defined here
collect2: error: ld returned 1 exit status
*** [.pio/build/d1_mini_lite/firmware.elf] Error 1

解决方案

platformio.inilib_deps 部分的 WiFi 移到列表顶部。修复前:

platformio_before.ini
lib_deps =
    ESP Async Webserver@1.2.3
    ArduinoJSON@6.17.2
    WiFi

修复后:

platformio_after.ini
lib_deps =
    WiFi
    ESP Async Webserver@1.2.3
    ArduinoJSON@6.17.2

现在你需要从项目目录中完全删除 .pio 文件夹:

remove_pio_folder.sh
rm -rf .pio

之后,重新编译你的固件

修复问题后完整的 platformio.ini 示例:

platformio_complete_example.ini
[env:d1_mini_lite]
platform = espressif8266
board = d1_mini_lite
framework = arduino
monitor_speed = 115200
lib_deps =
    WiFi
    ESP Async Webserver@1.2.3
    ArduinoJSON@6.17.2

Check out similar posts by category: Arduino, Electronics, PlatformIO