静态库(.a)文件在程序的链接阶段会被复制到可执行程序中,适合于加密算法的封装,本文主要介绍在使用ESP-IDF开发ESP工程时,静态库的生成以及使用方法。
一、 ESP-IDF 生成静态库方案简述
由于ESP-IDF默认在项目编译时,会将项目components文件夹下的每个 component输出成对应的.a库文件,并且最终存放项目的build/esp-idf文件夹下,所以我们仅需将目标模块做成一个component(组件)。
图1 ESP-IDF工程结构示意
图2 .a文件示意
二、 ESP-IDF 生成静态库
1. 创建初始工程
按照下述步骤创建工程:
Ø 1.1 新建工程
图3 新建工程
Ø 1.2 设置工程
图4 设置工程
Ø 1.3 选择示例工程
图5 选择示例工程
图6 示例工程
2. 添加组件工程
使用官方扩展组件生成组件工程
Ø 2.1 选择生成创建的扩展功能
****
图7 选择组件生成扩展功能
Ø 2.2 生成组件
****
图8 生成组件-1
Ø 2.3 组件创建完成
****
图9 带组件的工程
3. 生成静态库
在上述AES_example工程中完成所需功能,然后编译程序,即可在项目的build/esp-idf/AES_example目录下找到对应的.a文件。
图10 生成的静态库
三、 使用静态库
1. 添加静态库****
将生成的静态库文件以及.h文件添加到需要使用的工程中
****
图11 添加静态库文件****
2. 修改 CMakeList
添加完库文件后,需要修改对用工程的CMakeList.txt文件,以导入预构建库并链接库文件到组件。
****
图12 修改后的CMkaeList文件!
add_prebuilt_library(prebuilt "lib/libAES_ECB.a"
REQUIRES mbedtls log)
![文本框: target_link_libraries({COMPONENT_LIB} PRIVATE prebuilt) 链接库文件到组件:使用target_link_libraries()命令将库文件链接到组件。
3. 在程序中调用静态库****
在程序中调用静态库的方式与普通项目相同。首先,在需要使用的静态库的文件中包含静态库对应的.h文件,然后,就可以调用静态库中的API。
图13 调用静态库
四、 相关说明
首先,本文中在库文件的使用方面,仅介绍了使用ESP-IDF生成的.a静态库,对于其它方式生成的.a静态库的使用并未做介绍,但是,其使用方式基本相同,若需要可以参考:ESP32工程中CMake使用及加入第三方SDK库文件
其次,本文介绍的.a文件的使用目标为组件工程,若需要在main文件中使用静态库,则去修改main文件对应CMakeList.txt文件即可。