[Solved] ESP32 compiling error linking firmware.elf

Hi, I’ve been trying to update some ESP32 and none of them compile.

I’ve simplified the code to the bare minimum:

esphome:
  name: "cosas-xiaomi"

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "encryption_key"

ota:
  password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

And it compiles, but it has nothing on it.

If I put the just one more line:

esphome:
  name: "cosas-xiaomi"

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "encryption_key"

ota:
  password: !secret ota_password

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

esp32_ble_tracker:

It doesn’t compile:

INFO Reading configuration /config/esphome/cosas-xiaomi.yaml...
INFO Generating C++ source...
INFO Compiling app...
Processing cosas-xiaomi (board: esp32dev; framework: arduino; platform: platformio/espressif32 @ 5.2.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
 - toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch3
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
Dependency Graph
|-- WiFi @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- Update @ 2.0.0
|-- noise-c @ 0.1.4
|   |-- libsodium @ 1.10018.1
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/api_connection.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/api_frame_helper.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/api_pb2.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/api_pb2_service.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/api_server.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/list_entities.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/proto.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/subscribe_state.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/api/user_services.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/esp32/gpio.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/esp32/preferences.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/logger/logger.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/md5/md5.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/mdns/mdns_component.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/mdns/mdns_esp32_arduino.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/mdns/mdns_esp8266.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/mdns/mdns_esp_idf.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/mdns/mdns_rp2040.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/network/util.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/ota/ota_backend_arduino_esp32.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/ota/ota_backend_arduino_esp8266.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/ota/ota_backend_arduino_rp2040.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/ota/ota_backend_esp_idf.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/ota/ota_component.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/socket/bsd_sockets_impl.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/socket/lwip_raw_tcp_impl.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/socket/socket.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/wifi/wifi_component.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/wifi/wifi_component_esp32_arduino.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/wifi/wifi_component_esp8266.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/wifi/wifi_component_esp_idf.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/components/wifi/wifi_component_pico_w.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/core/application.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/core/component.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/core/component_iterator.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/core/controller.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/core/helpers.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/core/log.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/core/scheduler.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/esphome/core/util.cpp.o
Compiling /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/src/main.cpp.o
Linking /data/cosas-xiaomi/.pioenvs/cosas-xiaomi/firmware.elf
collect2: fatal error: ld terminated with signal 9 [Killed]
compilation terminated.
*** [/data/cosas-xiaomi/.pioenvs/cosas-xiaomi/firmware.elf] Error 1
========================= [FAILED] Took 24.89 seconds =========================

I don’t know what to do, because I have 2 ESP32 that uses esp32_ble_tracker and I can’t change any settings on them. And creating a new configuration from 0 doesn’t work.

Recently I’ve been getting collect2: fatal error: ld terminated with signal 9 [Killed] frequently when building with dashboard addon on my HA machine. Google search results indicate root cause is running out of RAM in build environment. I’ve had some luck restarting the add-on container and rebooting the host to get the everything to build but still get the error sometimes on first build after a full reboot so it has been pretty frustrating.

I couldn’t install or allocate more RAM on my current HA setup, so I ended up installing esphome on another linux virtual machine and building my projects via the command line. I was using the samba share addon to access the HA /config/esphome/ on the build machine so the dashboard editor could still be used and to avoid multiple copies of the configuration files.

Also you might want to try building with esp-idf instead of arduino. I haven’t used the BLE tracker much but seemed more reliable to me with esp-idf.

esp32:
  board: esp32dev
  framework:
    type: esp-idf
1 Like

That’s the solution. Thanks @mulcmu!!

I’ve checked the RAM of my system and changing to esp-idf it’s enough, the 2 GB works fine. But in case I need more RAM I can change it in my VM configuration.

1 Like

Hi, same issue. In my case the “studio_code_server” needed a hughe lot of MEMORY. STOP and RESTART helped to overcome KILL issue