#linker #esp-idf #cmakelists-options
Вопрос:
Я обновляю проект с помощью ESP-IDF с версии 3.0.9 до версии 4.3 и исправляю устаревший код, чтобы у него была версия для компиляции.
Я установил VS Code pluign v1.1.0 и без проблем скомпилировал пример проекта.
Мой текущий список CMakeList выглядит примерно так
idf_component_register(INCLUDE_DIRS "." "addrs" "button" "certs"
SRC_DIRS "." "addrs" "button" "certs"
EMBED_TXTFILES "certs/ca.crt"
EMBED_FILES "web/bin/style.css.min.gz")
Теперь я исправляю код и сталкиваюсь с проблемой связывания, например
неопределенная ссылка на «mbedtls_md5_starts»
Компиляция, похоже, пойдет дальше, если я добавлю строку
REQUIRES "mbedtls"
но внезапно я сталкиваюсь с проблемами с другими (nvs_flash, mdns, mqtt_client, …)
Со старой маркой у меня не было такой проблемы (не требуется эквивалент), поэтому я думаю, что мне следует настроить что-то получше. Должен ли я ТРЕБОВАТЬ все пакеты, или есть что-то, что нужно настроить, чтобы решить проблему?
Спасибо
Ответ №1:
Я почти уверен, что вам не нужно явно объявлять все свои зависимости — согласно документации по системе сборки ESP IDF, она по умолчанию пытается включить все компоненты.
Несмотря на это, я использую REQUIRES
в своем проекте, чтобы сделать их явными (и, надеюсь, сократить время компиляции). В документе говорится, что, когда вы идете этим путем, вы должны следовать ему до конца, иначе он даже не будет включать соответствующие файлы заголовков, не говоря уже о коде для не включенных в список компонентов.
Хорошей новостью является то, что я почти уверен, что вам нужно перечислить только компоненты самого высокого уровня REQUIRES "nvs_flash" "mdns" "esp_http_client"
, которые, в свою очередь, должны включать зависимости более низкого уровня, например mbedtls
. В качестве примера, это в моих списках CMakeLists:
...
REQUIRES
"spi_flash"
"nvs_flash"
"gcp_iot_sdk"
"wpa_supplicant"# This is already required by other components, but we
# explicitly require it for an include path to endian.h
"app_update" # OTA
"esp_https_ota" # HTTPS OTA
"esp_https_server"
"httpd_basic_auth"
"mdns"
"json"
"wear_levelling"# Wear levelling library for FAT file system
"fatfs" # File system
...