基于 ESP-IDF 将自定义的静态库制作成组件

此篇博客用来描述如何基于 ESP-IDF release/v3.3 添加并使用静态库。具体将分为以下几个部分:

  • 静态库的生成
  • 将生成的库文件放入 ESP-IDF 指定的存放位置
  • 将静态库添加至 cmake 中
  • 将静态库添加至 makefile 中

1. 静态库的生成

这一步说明如何生成后续要用到的静态库,以 static_lib.cstatic_lib.h 生成静态库为例。指令如下:

xtensa-esp32-elf-gcc -o static_lib.o -c static_lib.c  # 将源文件生成目标文件
xtensa-esp32-elf-ar rcs libstatic_lib.a static_lib.o # 将目标文件生成静态库

2. 将生成的库文件放入 ESP-IDF 指定的存放位置

这一步需要将上一步生成的文件放入 ESP-IDF 指定的存放位置。在`COMPONENT_PATH/CMAKE_CURRENT_SOURCE_DIR`下创建文件夹和文件关系如下:

components
└── static_lib
    ├── CMakeLists.txt
    ├── component.mk
    ├── include
    │   └── static_lib.h
    └── lib
        └── libstatic_lib.a

3. 将静态库添加至 cmake 中

这一步用来完善上一步创建的 CMakeLists.txt,以便于使用 cmake 时能成功编译。CMakeLists.txt 内容如下:

set(COMPONENT_SRCS "")
set(COMPONENT_ADD_INCLUDEDIRS . include)
register_component()
target_link_libraries(${COMPONENT_TARGET} INTERFACE "-L ${CMAKE_CURRENT_SOURCE_DIR}/lib")
target_link_libraries(${COMPONENT_TARGET} INTERFACE static_lib)

4. 将静态库添加至 makefile 中

这一步用来完善上一步创建的 component.mk,以便于使用 make 时能成功编译。component.mk 内容如下:

COMPONENT_ADD_INCLUDEDIRS := include
LIBS := static_lib
COMPONENT_ADD_LDFLAGS := $(COMPONENT_PATH)/lib/libstatic_lib.a
COMPONENT_ADD_LINKER_DEPS := $(patsubst %,$(COMPONENT_PATH)/lib/lib%.a,$(LIBS))

5. 注意事项

在完成上述所有步骤后,如果仍然无法正常使用此静态库,以 cmake 为例,可以在应用工程下的 main 文件夹下的 `CMakeLists.txt`` 里添加对应的组件依赖,如下:


set(COMPONENT_SRCS "hello_world_main.c")
set(COMPONENT_ADD_INCLUDEDIRS "")
set(COMPONENT_REQUIRES static_lib) # 在 `main` 文件夹下的 `CMakeLists.txt` 里添加此行

register_component()
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值