案例1:
【背景】
在使用SquareLine Studio设计UI时,成功导出UI代码,在编译代码的时候提示undefined reference to ‘ui_img_1869164015’,有一个变量无法识别,没有定义。
【定位步骤】
1.首先找到用这个变量的.c文件,位置
2.查看此.c文件包含的头ui.h文件中有没有变量ui_img_1869164015的定义 声明,发现有
3.然后就奇怪了,为什么编译说没有呢?
4.原因是在CMakeList.txt中没有加入入编译这个ui_img_1869164015.c这个文件。因为在LVGL重新生成的ui代码,多了这个文件
没有把新的.c加入编译
案例2:
同样报错如下:
main中调用的Bluetooth_int 函数在bluetooth.c中,也包含了头文件,但是编译就报错。
原因是bluetooth.c文件虽然存在,但是没有编译它
需要再CmakeLists.txt中添加编译(前面为了调试临时屏蔽了蓝牙相关内容,同时把bluetooth.c取消编译),等再次需要打开蓝牙时,确忘记添加到CmakeLists.txt中进行编译。
如下,添加即可,同时menuconfig中打开蓝牙相关开关项
总结:
属于低级错误,操作系统编程和裸机MCU不一样,esp32这里使用的Freertos系统,依赖CMake 做编译构建框架,.c文件必须加入CMakeList.txt才能被编译。