[已解决] 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

[已解决] 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby joseph_ji » Thu Jul 08, 2021 8:17 am

我的芯片是esp32c3,我在自己的ble_logical.c文件里面用到了一些API函数,如esp_ble_gap_start_advertising()、esp_ble_gap_stop_advertising();看了一下,是在idf的esp_gap_ble_api.c、esp_gap_ble_api.h里面定义声明的,我也把.h文件包含进来了,但是编译报错如下图:
OPFXIY{%RKT6R93CT9%@E~C.png
OPFXIY{%RKT6R93CT9%@E~C.png (96.74 KiB) Viewed 11534 times
看起来,好像是CMake没有把ble库链接进来导致的,请问,我是需要修改cmake?还是menuconfig哪里还需要配置?如果是要修改cmake的话,我要修改工程下的cmakelists.txt还是main/下的cmakelists.txt?
麻烦指导一下,十分感谢!

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby ESP_Gargamel » Thu Jul 08, 2021 8:34 am

你 menuconfig 里把 蓝牙 打开了吗?

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

Re: 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby joseph_ji » Thu Jul 08, 2021 8:44 am

ESP_Gargamel wrote:
Thu Jul 08, 2021 8:34 am
你 menuconfig 里把 蓝牙 打开了吗?
有打开,你看一下,这样配置有没问题
448WA3NM8U_$@UFX@57{~AS.png
448WA3NM8U_$@UFX@57{~AS.png (13.11 KiB) Viewed 11525 times
R)(~SZQ}H(GXCKJ_PQXJ50N.png
R)(~SZQ}H(GXCKJ_PQXJ50N.png (5.11 KiB) Viewed 11525 times

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby ESP_Gargamel » Thu Jul 08, 2021 9:22 am

Component config → Bluetooth → Bluedroid Options 下把 Enable BLE 4.2 features 打开。

这个问题,其实你可以自己反向推出来:
1、esp_ble_gap_start_advertising 在文件 esp_gap_ble_api.c 内
2、esp_ble_gap_start_advertising 被 #if (BLE_42_FEATURE_SUPPORT == TRUE) 包着
3、然后再追 BLE_42_FEATURE_SUPPORT,可以知道其依赖于 CONFIG_BT_BLE_42_FEATURES_SUPPORTED
4、搜索 BT_BLE_42_FEATURES_SUPPORTED 可以找到 Kconfig,你就知道是哪个配置项要打开

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

Re: 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby joseph_ji » Thu Jul 08, 2021 10:38 am

ESP_Gargamel wrote:
Thu Jul 08, 2021 9:22 am
Component config → Bluetooth → Bluedroid Options 下把 Enable BLE 4.2 features 打开。

这个问题,其实你可以自己反向推出来:
1、esp_ble_gap_start_advertising 在文件 esp_gap_ble_api.c 内
2、esp_ble_gap_start_advertising 被 #if (BLE_42_FEATURE_SUPPORT == TRUE) 包着
3、然后再追 BLE_42_FEATURE_SUPPORT,可以知道其依赖于 CONFIG_BT_BLE_42_FEATURES_SUPPORTED
4、搜索 BT_BLE_42_FEATURES_SUPPORTED 可以找到 Kconfig,你就知道是哪个配置项要打开
十分感谢你的解答,根据你的分析,我去看了一下,确实需要BLE_42_FEATURE_SUPPORT 为TRUE,但是我后面到menuconfig打开了BLE 4.2 features,但还是报一样的错;起初我怀疑是我的项目的问题,于是我使用helloworld工程测试了一下,也是同样的错误;

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby ESP_Gargamel » Thu Jul 08, 2021 10:56 am

那你整一个可复现问题的最小工程过来,包括 sdkconfig。

joseph_ji
Posts: 70
Joined: Thu Jun 17, 2021 1:26 am

Re: 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby joseph_ji » Thu Jul 08, 2021 1:00 pm

ESP_Gargamel wrote:
Thu Jul 08, 2021 10:56 am
那你整一个可复现问题的最小工程过来,包括 sdkconfig。
非常感谢,不过问题解决了,一开始即使我把enable 4.2 feature打开依然报错的原因是:在工程build 文件夹下有之前配置的残留;后面我把build清空,第一次配置就把enable 4.2 feature打开,然后编译就一次通过了

ligping
Posts: 2
Joined: Mon Sep 05, 2022 10:32 am

Re: 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby ligping » Mon Sep 05, 2022 10:34 am

joseph_ji wrote:
Thu Jul 08, 2021 1:00 pm
ESP_Gargamel wrote:
Thu Jul 08, 2021 10:56 am
那你整一个可复现问题的最小工程过来,包括 sdkconfig。
非常感谢,不过问题解决了,一开始即使我把enable 4.2 feature打开依然报错的原因是:在工程build 文件夹下有之前配置的残留;后面我把build清空,第一次配置就把enable 4.2 feature打开,然后编译就一次通过了
非常感谢,我也遇到这个问题,必须要把 5.0 feature 和4.2 feature都打开才可以编译通过

ligping
Posts: 2
Joined: Mon Sep 05, 2022 10:32 am

Re: [已解决] 使用了components里的API函数,在编译链接的时候报错undefined reference to'...'

Postby ligping » Mon Sep 05, 2022 10:35 am

非常感谢,我也遇到同样的问题,必须要同时把4.2 feature 和 5.0 feature都打开才能编译通过。

Who is online

Users browsing this forum: Google [Bot] and 79 guests