ESP-IDF静态库创建与使用

479 阅读2分钟

静态库(.a)文件在程序的链接阶段会被复制到可执行程序中,适合于加密算法的封装,本文主要介绍在使用ESP-IDF开发ESP工程时,静态库的生成以及使用方法。

一、 ESP-IDF 生成静态库方案简述

由于ESP-IDF默认在项目编译时,会将项目components文件夹下的每个 component输出成对应的.a库文件,并且最终存放项目的build/esp-idf文件夹下,所以我们仅需将目标模块做成一个component(组件)。

image.png 图1 ESP-IDF工程结构示意

image.png 图2 .a文件示意

二、 ESP-IDF 生成静态库

1. 创建初始工程

按照下述步骤创建工程:

Ø  1.1 新建工程

image.png 图3 新建工程

Ø  1.2 设置工程

image.png 图4 设置工程

Ø  1.3 选择示例工程

image.png 图5 选择示例工程

image.png 图6 示例工程

2. 添加组件工程

使用官方扩展组件生成组件工程

Ø  2.1 选择生成创建的扩展功能

****

image.png 图7 选择组件生成扩展功能

Ø  2.2 生成组件

****

image.png 图8 生成组件-1

Ø  2.3 组件创建完成

****

image.png 图9 带组件的工程

3. 生成静态库

在上述AES_example工程中完成所需功能,然后编译程序,即可在项目的build/esp-idf/AES_example目录下找到对应的.a文件。

image.png 图10 生成的静态库

三、 使用静态库

1. 添加静态库****

将生成的静态库文件以及.h文件添加到需要使用的工程中

****

image.png 图11 添加静态库文件****

2. 修改 CMakeList

添加完库文件后,需要修改对用工程的CMakeList.txt文件,以导入预构建库并链接库文件到组件。

****

image.png 图12 修改后的CMkaeList文件! add_prebuilt_library(prebuilt "lib/libAES_ECB.a"

                        REQUIRES mbedtls log)

![文本框: target_link_libraries(COMPONENTLIBPRIVATEprebuilt)]()导入预构建库:使用addprebuiltlibrary()命令导入库文件,指定目标名称prebuilt和库文件路径,同时指定库的私有依赖项。targetlinklibraries({COMPONENT_LIB} PRIVATE prebuilt)]()导入预构建库:使用add_prebuilt_library()命令导入库文件,指定目标名称prebuilt和库文件路径,同时指定库的私有依赖项。 target_link_libraries({COMPONENT_LIB} PRIVATE prebuilt) 链接库文件到组件:使用target_link_libraries()命令将库文件链接到组件。

3. 在程序中调用静态库****

在程序中调用静态库的方式与普通项目相同。首先,在需要使用的静态库的文件中包含静态库对应的.h文件,然后,就可以调用静态库中的API。

image.png 图13 调用静态库

四、 相关说明

首先,本文中在库文件的使用方面,仅介绍了使用ESP-IDF生成的.a静态库,对于其它方式生成的.a静态库的使用并未做介绍,但是,其使用方式基本相同,若需要可以参考:ESP32工程中CMake使用及加入第三方SDK库文件

其次,本文介绍的.a文件的使用目标为组件工程,若需要在main文件中使用静态库,则去修改main文件对应CMakeList.txt文件即可。