芯片开放社区
直播中

凌晨3点睡

12年用户 563经验值
私信 关注
[技术讨论]

TG6101上手指南:编译生成静态链接库介绍

1. Windows开发环境

首先介绍基于Windows 剑池 CDK 开发环境下,生成和使用静态链接库(.a库)的方法。本文使用剑池 CDK 版本为2.8.7,版本不同可能会导致操作步骤有略微不同,建议使用最新剑池 CDK 版本。

1.1 Windows下生成静态链接库

  • 源码准备:

准备好编译所需要的源文件和头文件,本文以test_lib为例:



  • 创建新组件:

打开剑池 CDK 左边的工程视图,在【Packages】上点击右键 -> 【Create a Common Package】,创建一个新的组件:



设置组件名称:



  • 添加组件代码:

添加完成后,可以在Packages 列表下面找到test_lib组件。刚创建时,默认只有一个空的README.md文件。点击右键,添加新文件/已有文件:



  • 修改组件配置文件:

右键点击test_lib -> 选择【Open Containing Folder】打开组件文件夹,编辑配置文件:package.yaml,配置编译参数。

关于配置文件的具体说明,请参考文档:描述文件(package.yaml),也可以参考其他组件的配置文件。


  • 开始编译工程,生成静态库:

右键工程名,点击build,开始编译。编译完成后,打开工程所在目录 -> 进入Obj目录,可以找到刚编译好的静态库:




1.2 Windows下使用静态链接库

  • 在工程目录下创建文件夹,用于存放该静态库,例如:app/lib


  • 右键该文件夹 ->【Add an Existing File】,选择刚刚生成的库libtest_lib.a,将库加入到文件夹:



  • 右键工程名 -> 【Open Solution Config File】,打开工程配置文件package.yaml



  • 在配置文件中build_config字段下,修改libslibpath配置,添加待使用静态库:



  • 移除Packages下面的test_lib组件,否则会出现重定义编译错误。右键点击【Packages】-> 选择【Packages for ......】:



在打开的组件管理窗口中,找到test_lib组件,点击【<<】,将组件从工程中移除:


点击【OK】,刷新工程,test_lib组件就会从工程下被移除。


  • 在代码中引用静态库头文件#include "test_lib.h",使用该静态库的函数。


  • 开始编译工程,静态库就可以被编译且使用了。


2. Linux开发环境

2.1 Linux下生成静态链接库

下面介绍在Linux开发环境下,生成和使用静态链接库(.a库)的方法。


  • 源码准备:

从工程根目录进入components目录,创建静态链接库的代码目录,并准备好源文件和头文件:

(依然以【test_lib】为例,其内包含include和src两个文件夹)

$ cd components/test_lib/
$ ls
include  src

  • 配置编译文件:

test_lib下创建编辑配置文件:package.yaml,配置编译参数。具体可以参考components目录下其他组件的配置文件,也可以参考文档:描述文件(package.yaml)

增加完配置文件后,当前目录结构如下:

$ ls
include  package.yaml  src

  • 准备编译:

开始编译之前,还需要手动将test_lib加入到解决方案的编译依赖中。首先进入解决方案目录,并编辑pacakage.yaml文件:

$ cd <工程根目录>
$ cd solutions/tg6101_smart_speaker/
$ vi package.yaml
depends字段下增加对test_lib的依赖(其中"v7.x.y"是test_lib的版本号):

depends:
  - test_lib: v7.x.y
修改完成后,保存退出。


  • 生成静态库:

执行make开始编译:

$ make clean; make
编译完成后,在yoc_sdk/lib目录下会生成对应的静态链接库(libtest_lib.a):

$ ls yoc_sdk/lib/
...
yoc_sdk/lib/libtest_lib.a
2.2 Linux下使用静态链接库

  • 删除对源代码的依赖:

使用静态链接库之前,首先需要删除解决方案对test_lib源代码的依赖,否则编译时会遇到重定义错误。编辑pacakage.yaml文件,移除对test_lib组件的依赖:

$ cd solutions/tg6101_smart_speaker/
$ vi package.yaml
// 编辑package.yaml文件
// 在depends字段下,删除行"- test_lib: v7.x.y"

  • 增加对静态库依赖:

在解决方案目录下,创建文件夹app/lib,并将生成的静态链接库拷贝到该文件夹下面:

$ mkdir -p app/lib
$ cp libtest_lib.a app/lib/
$ ls app/lib/
libtest_lib.a
编辑解决方案的配置文件package.yaml,在build_config字段下,修改libslibpath配置:

  libs:
    - test_lib
  libpath:
    - app/lib

  • 开始使用:

最后别忘了引用头文件 —— 将静态库对应的头文件(假设为test_lib.h)拷贝到app/include文件夹下面;在代码中引用该头文件:#include "test_lib.h",就可以顺利的使用静态库的函数了!

文章转载自:平头哥芯片开放社区 作者:炎赫

更多回帖

发帖
×
20
完善资料,
赚取积分