Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom outbox not building (IDFGH-13759) #287

Closed
3 tasks done
Teesmo opened this issue Sep 23, 2024 · 6 comments
Closed
3 tasks done

Custom outbox not building (IDFGH-13759) #287

Teesmo opened this issue Sep 23, 2024 · 6 comments

Comments

@Teesmo
Copy link

Teesmo commented Sep 23, 2024

Checklist

  • Checked the issue tracker for similar issues to ensure this is not a duplicate.
  • Provided a clear description of your suggestion.
  • Included any relevant context or examples.

Issue or Suggestion Description

I am implementing a custom outbox which is just a copy of mqtt_outbox.c with additional functions to persist the outbox to nvs. I copied the structure of the project level CMake file, and adapted it to include my C file (not the example C++ file). I removed redundant fucntions from my custom file (files in mqtt_outbox.c that I did not modify in my custom c file). I also renamed the functions that I modified, to avoid potential linker clash. However, when I build, I get this error:
[1014/1016] Linking CXX executable mesh_local_control.elf FAILED: mesh_local_control.elf : && /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/xtensa-esp32s2-elf-g++ -mlongcalls -fno-builtin-memcpy -fno-builtin-memset -fno-builtin-bzero -fno-builtin-stpcpy -fno-builtin-strncpy -Wl,--cref -Wl,--defsym=IDF_TARGET_ESP32S2=0 -Wl,--Map=/home/onepower/projects/esp/1meter_project/mesh_local_control/build/mesh_local_control.map -Wl,--no-warn-rwx-segments -fno-rtti -fno-lto -Wl,--gc-sections -Wl,--warn-common -T esp32s2.peripherals.ld -T esp32s2.rom.ld -T esp32s2.rom.api.ld -T esp32s2.rom.libgcc.ld -T esp32s2.rom.newlib-funcs.ld -T esp32s2.rom.newlib-data.ld -T esp32s2.rom.spiflash_legacy.ld -T memory.ld -T sections.ld CMakeFiles/mesh_local_control.elf.dir/project_elf_src_esp32s2.c.obj -o mesh_local_control.elf -L/home/onepower/esp/esp-idf/components/soc/esp32s2/ld -L/home/onepower/esp/esp-idf/components/esp_rom/esp32s2/ld -L/home/onepower/projects/esp/1meter_project/mesh_local_control/build/esp-idf/esp_system/ld -L/home/onepower/esp/esp-idf/components/esp_phy/lib/esp32s2 -L/home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2 esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/app_trace/libapp_trace.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_dac/libesp_driver_dac.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/unity/libunity.a esp-idf/cmock/libcmock.a esp-idf/console/libconsole.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_driver_cam/libesp_driver_cam.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/esp_hid/libesp_hid.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_https_server/libesp_https_server.a esp-idf/esp_psram/libesp_psram.a esp-idf/esp_lcd/libesp_lcd.a esp-idf/protobuf-c/libprotobuf-c.a esp-idf/protocomm/libprotocomm.a esp-idf/esp_local_ctrl/libesp_local_ctrl.a esp-idf/espcoredump/libespcoredump.a esp-idf/wear_levelling/libwear_levelling.a esp-idf/fatfs/libfatfs.a esp-idf/json/libjson.a esp-idf/mqtt/libmqtt.a esp-idf/nvs_sec_provider/libnvs_sec_provider.a esp-idf/perfmon/libperfmon.a esp-idf/spiffs/libspiffs.a esp-idf/touch_element/libtouch_element.a esp-idf/usb/libusb.a esp-idf/wifi_provisioning/libwifi_provisioning.a esp-idf/espressif__esp_modem/libespressif__esp_modem.a esp-idf/espressif__usb_host_cdc_acm/libespressif__usb_host_cdc_acm.a esp-idf/espressif__esp_modem_usb_dte/libespressif__esp_modem_usb_dte.a esp-idf/espressif__tinyusb/libespressif__tinyusb.a esp-idf/espressif__esp_tinyusb/libespressif__esp_tinyusb.a esp-idf/espressif__iot_bridge/libespressif__iot_bridge.a esp-idf/espressif__mesh_lite/libespressif__mesh_lite.a esp-idf/joltwallet__littlefs/libjoltwallet__littlefs.a esp-idf/protocol_examples_common/libprotocol_examples_common.a esp-idf/main/libmain.a esp-idf/app_trace/libapp_trace.a esp-idf/app_trace/libapp_trace.a esp-idf/cmock/libcmock.a esp-idf/unity/libunity.a esp-idf/esp_driver_cam/libesp_driver_cam.a esp-idf/esp_hid/libesp_hid.a esp-idf/esp_lcd/libesp_lcd.a esp-idf/esp_local_ctrl/libesp_local_ctrl.a esp-idf/esp_https_server/libesp_https_server.a esp-idf/espcoredump/libespcoredump.a -u esp_system_include_coredump_init esp-idf/mqtt/libmqtt.a esp-idf/nvs_sec_provider/libnvs_sec_provider.a -u nvs_sec_provider_include_impl esp-idf/perfmon/libperfmon.a esp-idf/spiffs/libspiffs.a esp-idf/touch_element/libtouch_element.a esp-idf/wifi_provisioning/libwifi_provisioning.a esp-idf/protocomm/libprotocomm.a esp-idf/protobuf-c/libprotobuf-c.a esp-idf/espressif__mesh_lite/libespressif__mesh_lite.a /home/onepower/projects/esp/1meter_project/mesh_local_control/managed_components/espressif__mesh_lite/lib/libesp_mesh_lite_esp32s2.a esp-idf/espressif__mesh_lite/libespressif__mesh_lite.a /home/onepower/projects/esp/1meter_project/mesh_local_control/managed_components/espressif__mesh_lite/lib/libesp_mesh_lite_esp32s2.a esp-idf/json/libjson.a esp-idf/espressif__iot_bridge/libespressif__iot_bridge.a esp-idf/espressif__esp_modem_usb_dte/libespressif__esp_modem_usb_dte.a esp-idf/espressif__esp_modem/libespressif__esp_modem.a esp-idf/espressif__usb_host_cdc_acm/libespressif__usb_host_cdc_acm.a esp-idf/espressif__esp_tinyusb/libespressif__esp_tinyusb.a esp-idf/fatfs/libfatfs.a esp-idf/wear_levelling/libwear_levelling.a esp-idf/usb/libusb.a esp-idf/espressif__tinyusb/libespressif__tinyusb.a esp-idf/joltwallet__littlefs/libjoltwallet__littlefs.a esp-idf/protocol_examples_common/libprotocol_examples_common.a esp-idf/console/libconsole.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_dac/libesp_driver_dac.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_psram/libesp_psram.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libcore.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libespnow.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libmesh.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libnet80211.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libpp.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libsmartconfig.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_dac/libesp_driver_dac.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_psram/libesp_psram.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libcore.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libespnow.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libmesh.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libnet80211.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libpp.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libsmartconfig.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_dac/libesp_driver_dac.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_psram/libesp_psram.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libcore.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libespnow.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libmesh.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libnet80211.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libpp.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libsmartconfig.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_dac/libesp_driver_dac.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_psram/libesp_psram.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libcore.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libespnow.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libmesh.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libnet80211.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libpp.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libsmartconfig.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_dac/libesp_driver_dac.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_psram/libesp_psram.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libcore.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libespnow.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libmesh.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libnet80211.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libpp.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libsmartconfig.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libwapi.a esp-idf/xtensa/libxtensa.a esp-idf/esp_driver_gpio/libesp_driver_gpio.a esp-idf/esp_pm/libesp_pm.a esp-idf/mbedtls/libmbedtls.a esp-idf/esp_app_format/libesp_app_format.a esp-idf/esp_bootloader_format/libesp_bootloader_format.a esp-idf/app_update/libapp_update.a esp-idf/esp_partition/libesp_partition.a esp-idf/efuse/libefuse.a esp-idf/bootloader_support/libbootloader_support.a esp-idf/esp_mm/libesp_mm.a esp-idf/spi_flash/libspi_flash.a esp-idf/esp_system/libesp_system.a esp-idf/esp_common/libesp_common.a esp-idf/esp_rom/libesp_rom.a esp-idf/hal/libhal.a esp-idf/log/liblog.a esp-idf/heap/libheap.a esp-idf/soc/libsoc.a esp-idf/esp_hw_support/libesp_hw_support.a esp-idf/freertos/libfreertos.a esp-idf/newlib/libnewlib.a esp-idf/pthread/libpthread.a esp-idf/cxx/libcxx.a esp-idf/esp_timer/libesp_timer.a esp-idf/esp_driver_gptimer/libesp_driver_gptimer.a esp-idf/esp_ringbuf/libesp_ringbuf.a esp-idf/esp_driver_uart/libesp_driver_uart.a esp-idf/esp_event/libesp_event.a esp-idf/nvs_flash/libnvs_flash.a esp-idf/esp_driver_pcnt/libesp_driver_pcnt.a esp-idf/esp_driver_spi/libesp_driver_spi.a esp-idf/esp_driver_i2s/libesp_driver_i2s.a esp-idf/sdmmc/libsdmmc.a esp-idf/esp_driver_sdspi/libesp_driver_sdspi.a esp-idf/esp_driver_dac/libesp_driver_dac.a esp-idf/esp_driver_rmt/libesp_driver_rmt.a esp-idf/esp_driver_tsens/libesp_driver_tsens.a esp-idf/esp_driver_sdm/libesp_driver_sdm.a esp-idf/esp_driver_i2c/libesp_driver_i2c.a esp-idf/esp_driver_ledc/libesp_driver_ledc.a esp-idf/driver/libdriver.a esp-idf/esp_phy/libesp_phy.a esp-idf/esp_vfs_console/libesp_vfs_console.a esp-idf/vfs/libvfs.a esp-idf/lwip/liblwip.a esp-idf/esp_netif/libesp_netif.a esp-idf/wpa_supplicant/libwpa_supplicant.a esp-idf/esp_coex/libesp_coex.a esp-idf/esp_wifi/libesp_wifi.a esp-idf/http_parser/libhttp_parser.a esp-idf/esp-tls/libesp-tls.a esp-idf/esp_adc/libesp_adc.a esp-idf/esp_eth/libesp_eth.a esp-idf/esp_gdbstub/libesp_gdbstub.a esp-idf/tcp_transport/libtcp_transport.a esp-idf/esp_http_client/libesp_http_client.a esp-idf/esp_http_server/libesp_http_server.a esp-idf/esp_https_ota/libesp_https_ota.a esp-idf/esp_psram/libesp_psram.a esp-idf/mbedtls/mbedtls/library/libmbedtls.a esp-idf/mbedtls/mbedtls/library/libmbedcrypto.a esp-idf/mbedtls/mbedtls/library/libmbedx509.a esp-idf/mbedtls/mbedtls/3rdparty/everest/libeverest.a esp-idf/mbedtls/mbedtls/3rdparty/p256-m/libp256m.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libcore.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libespnow.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libmesh.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libnet80211.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libpp.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libsmartconfig.a /home/onepower/esp/esp-idf/components/esp_wifi/lib/esp32s2/libwapi.a /home/onepower/esp/esp-idf/components/xtensa/esp32s2/libxt_hal.a -u esp_app_desc -u esp_efuse_startup_include_func -u ld_include_highint_hdl -u start_app -u __ubsan_include -u esp_system_include_startup_funcs -Wl,--wrap=longjmp -u __assert_func -Wl,--undefined=FreeRTOS_openocd_params -u app_main -lc -lm -u newlib_include_heap_impl -u newlib_include_syscalls_impl -u newlib_include_pthread_impl -u newlib_include_assert_impl -u newlib_include_getentropy_impl -u newlib_include_init_funcs -u pthread_include_pthread_impl -u pthread_include_pthread_cond_var_impl -u pthread_include_pthread_local_storage_impl -u pthread_include_pthread_rwlock_impl -u pthread_include_pthread_semaphore_impl -Wl,--wrap=__register_frame_info_bases -Wl,--wrap=__register_frame_info -Wl,--wrap=__register_frame -Wl,--wrap=__register_frame_info_table_bases -Wl,--wrap=__register_frame_info_table -Wl,--wrap=__register_frame_table -Wl,--wrap=__deregister_frame_info_bases -Wl,--wrap=__deregister_frame_info -Wl,--wrap=_Unwind_Find_FDE -Wl,--wrap=_Unwind_GetGR -Wl,--wrap=_Unwind_GetCFA -Wl,--wrap=_Unwind_GetIP -Wl,--wrap=_Unwind_GetIPInfo -Wl,--wrap=_Unwind_GetRegionStart -Wl,--wrap=_Unwind_GetDataRelBase -Wl,--wrap=_Unwind_GetTextRelBase -Wl,--wrap=_Unwind_SetIP -Wl,--wrap=_Unwind_SetGR -Wl,--wrap=_Unwind_GetLanguageSpecificData -Wl,--wrap=_Unwind_FindEnclosingFunction -Wl,--wrap=_Unwind_Resume -Wl,--wrap=_Unwind_RaiseException -Wl,--wrap=_Unwind_DeleteException -Wl,--wrap=_Unwind_ForcedUnwind -Wl,--wrap=_Unwind_Resume_or_Rethrow -Wl,--wrap=_Unwind_Backtrace -Wl,--wrap=__cxa_call_unexpected -Wl,--wrap=__gxx_personality_v0 -Wl,--wrap=__cxa_throw -Wl,--wrap=__cxa_allocate_exception -u __cxa_guard_dummy -u __cxx_init_dummy -lstdc++ esp-idf/pthread/libpthread.a esp-idf/newlib/libnewlib.a -lgcc esp-idf/cxx/libcxx.a -u __cxx_fatal_exception -u esp_timer_init_include_func -u uart_vfs_include_dev_init -u include_esp_phy_override -lphy esp-idf/esp_phy/libesp_phy.a -lphy esp-idf/esp_phy/libesp_phy.a -lphy -u esp_vfs_include_console_register -u vfs_include_syscalls_impl && : /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.create_client_data+0x4): undefined reference to outbox_init'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.remove_initiator_message+0x0): undefined reference to outbox_delete' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.mqtt_process_receive+0x20): undefined reference to outbox_set_pending'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.mqtt_delete_expired_messages+0x4): undefined reference to outbox_delete_expired' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.mqtt_resend_queued+0x8): undefined reference to outbox_item_get_data'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.mqtt_resend_queued+0xc): undefined reference to outbox_item_get_pending' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.mqtt_resend_queued+0x10): undefined reference to outbox_delete_item'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.esp_mqtt_task+0x20): undefined reference to outbox_dequeue' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.esp_mqtt_task+0x28): undefined reference to outbox_delete_all_items'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.mqtt_enqueue+0x0): undefined reference to outbox_enqueue' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.esp_mqtt_client_destroy+0x0): undefined reference to outbox_destroy'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj):(.literal.esp_mqtt_client_subscribe_multiple+0xc): undefined reference to outbox_get_size' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function create_client_data':
/home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:842:(.text.create_client_data+0x65): undefined reference to outbox_init' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function remove_initiator_message':
/home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1117:(.text.remove_initiator_message+0xa): undefined reference to outbox_delete' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function mqtt_process_receive':
/home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1423:(.text.mqtt_process_receive+0x1e2): undefined reference to outbox_set_pending' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function mqtt_delete_expired_messages':
/home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1469:(.text.mqtt_delete_expired_messages+0x17): undefined reference to outbox_delete_expired' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function mqtt_resend_queued':
/home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1475:(.text.mqtt_resend_queued+0x14): undefined reference to outbox_item_get_data' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1491:(.text.mqtt_resend_queued+0x2a): undefined reference to outbox_item_get_pending'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1514:(.text.mqtt_resend_queued+0x7a): undefined reference to outbox_delete_item' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function esp_mqtt_task':
/home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1651:(.text.esp_mqtt_task+0x1d2): undefined reference to outbox_dequeue' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1657:(.text.esp_mqtt_task+0x1ec): undefined reference to outbox_set_pending'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1674:(.text.esp_mqtt_task+0x238): undefined reference to outbox_dequeue' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1716:(.text.esp_mqtt_task+0x3d9): undefined reference to outbox_delete_all_items'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function mqtt_enqueue': /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1724:(.text.mqtt_enqueue+0x38): undefined reference to outbox_enqueue'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function esp_mqtt_client_destroy': /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:906:(.text.esp_mqtt_client_destroy+0x23): undefined reference to outbox_destroy'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function esp_mqtt_client_subscribe_multiple': /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1880:(.text.esp_mqtt_client_subscribe_multiple+0x30): undefined reference to outbox_get_size'
/home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: /home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:1923:(.text.esp_mqtt_client_subscribe_multiple+0xe2): undefined reference to outbox_set_pending' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function esp_mqtt_client_enqueue':
/home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:2187:(.text.esp_mqtt_client_enqueue+0x50): undefined reference to outbox_get_size' /home/onepower/.espressif/tools/xtensa-esp-elf/esp-13.2.0_20240305/xtensa-esp-elf/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld: esp-idf/mqtt/libmqtt.a(mqtt_client.c.obj): in function esp_mqtt_client_get_outbox_size':
/home/onepower/esp/esp-idf/components/mqtt/esp-mqtt/mqtt_client.c:2267:(.text.esp_mqtt_client_get_outbox_size+0x16): undefined reference to outbox_get_size' collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed.

To sanity check, I copied the custom mqtt example to a separate folder (out of idf), and it built perfectly. My custom outbox implementation (almost all the files) is technically the same as the example C++ custom example, and I was expecting that I would not encounter any errors since I have copied evereything 'almost' to the tee.

@github-actions github-actions bot changed the title Custom outbox not building Custom outbox not building (IDFGH-13759) Sep 23, 2024
@euripedesrocha
Copy link
Collaborator

Hi @Teesmo If I understood correctly you only implemented in your custom outbox the functions you needed to be customized.
To have a custom outbox, you need to implement all functions.

@Teesmo
Copy link
Author

Teesmo commented Sep 24, 2024

@euripedesrocha I tried copying and pasting mqtt_outbox.c, and added a few other functions, and that didn't work as well (in this scenario, I kept everything from mqtt_outbox.c). This error specifically says all those functions in mqtt_outbox.c are not defined, or something to that effect.

@euripedesrocha
Copy link
Collaborator

@Teesmo once you enable the custom outbox, all implementation for the outbox will be removed. You then need to add your custom functions for the build.

You can see at this line how to add your sources.

If you can share the cmake file and the content of your customized implementation, I can give you other suggestions to fix.

@Teesmo
Copy link
Author

Teesmo commented Sep 24, 2024

Here is my CMake

cmake_minimum_required(VERSION 3.16) include($ENV{IDF_PATH}/tools/cmake/project.cmake) project(mesh_local_control) idf_component_get_property(mqtt mqtt COMPONENT_LIB) target_sources(${mqtt} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/main/custom_outbox.c)

and here is my custom outbox

#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "mqtt_config.h"
#include "sys/queue.h"
#include "esp_heap_caps.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "nvs.h"
#ifndef CONFIG_MQTT_CUSTOM_OUTBOX

static const char *TAG = "outbox";

typedef struct outbox_item {
    char *buffer;
    int len;
    int msg_id;
    int msg_type;
    int msg_qos;
    outbox_tick_t tick;
    pending_state_t pending;
    STAILQ_ENTRY(outbox_item) next;
} outbox_item_t;

STAILQ_HEAD(outbox_list_t, outbox_item);

struct outbox_t {
    _Atomic uint64_t size;
    struct outbox_list_t *list;
    nvs_handle_t nvs_handle;
};

esp_err_t save_outbox_to_nvs(outbox_handle_t outbox)
{
    esp_err_t err;
    
    // Save the size
    err = nvs_set_u64(outbox->nvs_handle, "size", outbox->size);
    if (err != ESP_OK) return err;

    // Save the number of items
    uint32_t item_count = 0;
    outbox_item_handle_t item;
    STAILQ_FOREACH(item, outbox->list, next) {
        item_count++;
    }
    err = nvs_set_u32(outbox->nvs_handle, "item_count", item_count);
    if (err != ESP_OK) return err;

    // Save each item
    uint32_t i = 0;
    STAILQ_FOREACH(item, outbox->list, next) {
        char key[32];
        snprintf(key, sizeof(key), "item_%ld", i);
        
        err = nvs_set_blob(outbox->nvs_handle, key, item, sizeof(outbox_item_t));
        if (err != ESP_OK) return err;

        snprintf(key, sizeof(key), "buffer_%ld", i);
        err = nvs_set_blob(outbox->nvs_handle, key, item->buffer, item->len);
        if (err != ESP_OK) return err;

        i++;
    }

    return nvs_commit(outbox->nvs_handle);
}

esp_err_t load_outbox_from_nvs(outbox_handle_t outbox)
{
    esp_err_t err;

    // Load the size
    err = nvs_get_u64(outbox->nvs_handle, "size", (uint64_t *)&outbox->size);
    if (err == ESP_ERR_NVS_NOT_FOUND) {
        // No saved outbox
        return ESP_OK;
    } else if (err != ESP_OK) {
        return err;
    }

    // Load the number of items
    uint32_t item_count;
    err = nvs_get_u32(outbox->nvs_handle, "item_count", &item_count);
    if (err != ESP_OK) return err;

    // Load each item
    for (uint32_t i = 0; i < item_count; i++) {
        char key[32];
        outbox_item_t item;
	ESP_LOGI(TAG,"Item count: %ld\n", item_count);

        snprintf(key, sizeof(key), "item_%ld", i);
        size_t item_size = sizeof(outbox_item_t);
        err = nvs_get_blob(outbox->nvs_handle, key, &item, &item_size);
        if (err != ESP_OK) return err;

        outbox_item_handle_t new_item = malloc(sizeof(outbox_item_t));
        if (!new_item) return ESP_ERR_NO_MEM;
        memcpy(new_item, &item, sizeof(outbox_item_t));
	//ESP_LOGI(TAG,"Item: %s\n", new_item->buffer);

        snprintf(key, sizeof(key), "buffer_%ld", i);
        new_item->buffer = malloc(new_item->len);
        if (!new_item->buffer) {
            free(new_item);
            return ESP_ERR_NO_MEM;
        }
        size_t buffer_size = new_item->len;
	ESP_LOGI(TAG,"buffer_size: %zu\n", buffer_size);
        err = nvs_get_blob(outbox->nvs_handle, key, new_item->buffer, &buffer_size);
        if (err != ESP_OK) {
            free(new_item->buffer);
            free(new_item);
            return err;
        }

        STAILQ_INSERT_TAIL(outbox->list, new_item, next);
    }

    return ESP_OK;
}

outbox_handle_t outbox_init(void)
{
    outbox_handle_t outbox = calloc(1, sizeof(struct outbox_t));
    ESP_MEM_CHECK(TAG, outbox, return NULL);
    outbox->list = calloc(1, sizeof(struct outbox_list_t));
    ESP_MEM_CHECK(TAG, outbox->list, {free(outbox); return NULL;});
    outbox->size = 0;
    STAILQ_INIT(outbox->list);

	
    //Initialize NVS
    esp_err_t err = nvs_flash_init();
    if (err ==ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {
	    ESP_ERROR_CHECK(nvs_flash_erase());
	    err = nvs_flash_init();
    }
    ESP_ERROR_CHECK(err);

    err = nvs_open("mqtt_outbox", NVS_READWRITE, &outbox->nvs_handle);
    if (err != ESP_OK) {
	    ESP_LOGE(TAG, "Error opening NVS handle");
	    free(outbox->list);
	    free(outbox);
	    return NULL;
    }
    
    load_outbox_from_nvs(outbox);
    
    return outbox;
}

outbox_item_handle_t outbox_enqueue(outbox_handle_t outbox, outbox_message_handle_t message, outbox_tick_t tick)
{
    outbox_item_handle_t item = calloc(1, sizeof(outbox_item_t));
    ESP_MEM_CHECK(TAG, item, return NULL);
    item->msg_id = message->msg_id;
    item->msg_type = message->msg_type;
    item->msg_qos = message->msg_qos;
    item->tick = tick;
    item->len =  message->len + message->remaining_len;
    item->pending = QUEUED;
    item->buffer = heap_caps_malloc(message->len + message->remaining_len, MQTT_OUTBOX_MEMORY);
    ESP_MEM_CHECK(TAG, item->buffer, {
        free(item);
        return NULL;
    });
    memcpy(item->buffer, message->data, message->len);
    if (message->remaining_data) {
        memcpy(item->buffer + message->len, message->remaining_data, message->remaining_len);
    }
    STAILQ_INSERT_TAIL(outbox->list, item, next);
    outbox->size += item->len;
    ESP_LOGD(TAG, "ENQUEUE msgid=%d, msg_type=%d, len=%d, size=%"PRIu64, message->msg_id, message->msg_type, message->len + message->remaining_len, outbox_get_size(outbox));save_outbox_to_nvs(outbox);

    return item;
}

outbox_item_handle_t outbox_get(outbox_handle_t outbox, int msg_id)
{
    outbox_item_handle_t item;
    STAILQ_FOREACH(item, outbox->list, next) {
        if (item->msg_id == msg_id) {
            return item;
        }
    }
    return NULL;
}

outbox_item_handle_t outbox_dequeue(outbox_handle_t outbox, pending_state_t pending, outbox_tick_t *tick)
{
    outbox_item_handle_t item;
    STAILQ_FOREACH(item, outbox->list, next) {
        if (item->pending == pending) {
            if (tick) {
                *tick = item->tick;
            }
            return item;
        }
    }
    return NULL;
}

esp_err_t outbox_delete_item(outbox_handle_t outbox, outbox_item_handle_t item_to_delete)
{
    outbox_item_handle_t item;
    STAILQ_FOREACH(item, outbox->list, next) {
        if (item == item_to_delete) {
            STAILQ_REMOVE(outbox->list, item, outbox_item, next);
            outbox->size -= item->len;
	    save_outbox_to_nvs(outbox);
            free(item->buffer);
            free(item);
            return ESP_OK;
        }
    }
    return ESP_FAIL;
}

uint8_t *outbox_item_get_data(outbox_item_handle_t item,  size_t *len, uint16_t *msg_id, int *msg_type, int *qos)
{
    if (item) {
        *len = item->len;
        *msg_id = item->msg_id;
        *msg_type = item->msg_type;
        *qos = item->msg_qos;
        return (uint8_t *)item->buffer;
    }
    return NULL;
}

esp_err_t outbox_delete(outbox_handle_t outbox, int msg_id, int msg_type)
{
    outbox_item_handle_t item, tmp;
    STAILQ_FOREACH_SAFE(item, outbox->list, next, tmp) {
        if (item->msg_id == msg_id && (0xFF & (item->msg_type)) == msg_type) {
            STAILQ_REMOVE(outbox->list, item, outbox_item, next);
            outbox->size -= item->len;
            free(item->buffer);
            free(item);
            ESP_LOGD(TAG, "DELETED msgid=%d, msg_type=%d, remain size=%"PRIu64, msg_id, msg_type, outbox_get_size(outbox));
            return ESP_OK;
        }

    }
    return ESP_FAIL;
}

esp_err_t outbox_set_pending(outbox_handle_t outbox, int msg_id, pending_state_t pending)
{
    outbox_item_handle_t item = outbox_get(outbox, msg_id);
    if (item) {
        item->pending = pending;
        return ESP_OK;
    }
    return ESP_FAIL;
}

pending_state_t outbox_item_get_pending(outbox_item_handle_t item)
{
    if (item) {
        return item->pending;
    }
    return QUEUED;
}

esp_err_t outbox_set_tick(outbox_handle_t outbox, int msg_id, outbox_tick_t tick)
{
    outbox_item_handle_t item = outbox_get(outbox, msg_id);
    if (item) {
        item->tick = tick;
        return ESP_OK;
    }
    return ESP_FAIL;
}

int outbox_delete_single_expired(outbox_handle_t outbox, outbox_tick_t current_tick, outbox_tick_t timeout)
{
    int msg_id = -1;
    outbox_item_handle_t item;
    STAILQ_FOREACH(item, outbox->list, next) {
        if (current_tick - item->tick > timeout) {
            STAILQ_REMOVE(outbox->list, item, outbox_item, next);
            free(item->buffer);
            outbox->size -= item->len;
            msg_id = item->msg_id;
            free(item);
            return msg_id;
        }

    }
    return msg_id;
}

int outbox_delete_expired(outbox_handle_t outbox, outbox_tick_t current_tick, outbox_tick_t timeout)
{
    int deleted_items = 0;
    outbox_item_handle_t item, tmp;
    STAILQ_FOREACH_SAFE(item, outbox->list, next, tmp) {
        if (current_tick - item->tick > timeout) {
            STAILQ_REMOVE(outbox->list, item, outbox_item, next);
            free(item->buffer);
            outbox->size -= item->len;
            free(item);
            deleted_items ++;
        }

    }
    return deleted_items;
}

uint64_t outbox_get_size(outbox_handle_t outbox)
{
    return outbox->size;
}

void outbox_delete_all_items(outbox_handle_t outbox)
{
    outbox_item_handle_t item, tmp;
    STAILQ_FOREACH_SAFE(item, outbox->list, next, tmp) {
        STAILQ_REMOVE(outbox->list, item, outbox_item, next);
        outbox->size -= item->len;
        free(item->buffer);
        free(item);
    }
    save_outbox_to_nvs(outbox);
}
void outbox_destroy(outbox_handle_t outbox)
{
    outbox_delete_all_items(outbox);
    nvs_close(outbox->nvs_handle);
    free(outbox->list);
    free(outbox);
}


#endif /* CONFIG_MQTT_CUSTOM_OUTBOX */

@Teesmo
Copy link
Author

Teesmo commented Sep 24, 2024

I figured that my issues were created by this line (and its closing counterpart)
#ifndef CONFIG_MQTT_CUSTOM_OUTBOX
My issue seems to have been solved since I deleted it.

@euripedesrocha
Copy link
Collaborator

@Teesmo yes. We use the mechanism to prevent the outbox functions to b included in the build if the custom outbox is enabled. I'm assuming that I can close this issue, feel free to reopen if needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants