ESP-IDF 版本:v5.5.1
SDKConfig配置:
Bluetooth --> Host --> NimBLE - BLE only
--> Controller --> Enable
main.c中报错部分内容:
#include xxxx
#include "esp_bt.h"
#include "esp_nimble_hci.h"
#include xxxx
// 初始化NimBLE
ESP_ERROR_CHECK(esp_nimble_hci_init());
与 main.c 同级的 CMakeLists.txt 内容:
idf_component_register(SRCS "cmd_pcap.c" "cmd_sniffer.c" "main.c" "pcap.c"
INCLUDE_DIRS "."
REQUIRES bt console fatfs nvs_flash)
运行 idf.py build 后,报错如下:
../main/main.c:4:10: fatal error: esp_nimble_hci.h: No such file or directory
4 | #include "esp_nimble_hci.h"
| ^~~~~~~~~~~~~~~~~~
compilation terminated.
问题是找不到nimble组件的头文件,编译失败。
自主修改 CMakeLists.txt 内容,添加了头文件路径:
idf_component_register(SRCS "cmd_pcap.c" "cmd_sniffer.c" "main.c" "pcap.c"
INCLUDE_DIRS "." "../components/bt/host/nimble/esp-hci/include"
REQUIRES bt console fatfs nvs_flash)
运行 idf.py build 后,报错如下:
[957/959] Linking CXX executable bluetooth_sniffer.elf
FAILED: bluetooth_sniffer.elf
/home/zed/.espressif/tools/riscv32-esp-elf/esp-14.2.0_20241119/riscv32-esp-elf/bin/../lib/gcc/riscv32-esp-elf/14.2.0/../../../../riscv32-esp-elf/bin/ld: esp-idf/main/libmain.a(main.c.obj): in function `initialize_nvs':
/home/zed/esp/ble-cent/build/../main/main.c:49:(.text.initialize_bluetooth+0x4): undefined reference to `esp_nimble_hci_init'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
问题是链接失败。
已经跟使用过nimble组件中 esp_nimble_hci_init() 初始化函数的 example 文件夹中相关项目的配置进行了比对,SDKconfig的配置基本一致,CMakeLists.txt看上去感觉也没有问题,有没有大佬帮忙看看问题出在哪里啊