查看: 3738|回复: 4

arduino .a静态库制作和使用

[复制链接]

该用户从未签到

发表于 2020-6-29 10:02 | 显示全部楼层 |阅读模式
本帖最后由 跑龙套的保 于 2020-6-29 10:09 编辑

大家好久不见,最近工作需要生成静态库一个静态库文件给arduino使用,查询网上相关资料不多,现把制作和使用方法分享给大家。
在日常编码中,我们编写了一些私密算法或者含有私密信息的库时,我们不想开放给别人看,通常制作静态库来实现.

.a静态库文件

.a文件即静态库文件,静态库文件把.o文件打包,一方面易于移植使用,一方面可以保护源码不被反汇编或者被泄露。
ps:arduino推崇开源共享,非必要情况下建议大家开源源码,使用他人库制作静态库需遵循开源许可。

生成.a文件

创建一个库,比如TEST_Library,创建库文件,一般文件结构如下,可以从别的库复制修改,附件也提供

├─examples
│  └─TEST
│          test.ino
└─src
    │  test.h
    │  test.cpp
│  keywords.txt
│  library.json
│  library.properties
│  LICENSE
│  README.md
│

重点在于创建的library.properties文件,在文件末尾加入一行dot_a_linkage=true意思为把此库编译为.a文件。

name=test
version=1.0.0
author=rousir
maintainer=rousir
sentence=Arduino libary
paragraph=
category=demo
url=https://github.com/rousir
architectures=*
includes=test.h
dot_a_linkage=true

在.h .cpp文件和示例中写入自己的源码,比如我写了个helloworld
test.h

#ifndef test_h
#define test_h

#include "Arduino.h"

class TEST
{
public:
  TEST();
  void print();
private:
  ;
};

#endif

test.cpp

#include "Arduino.h"
#include "test.h"

TEST::TEST(){
        Serial.println("TEST");
}

void TEST::print(){
        Serial.println("hellow world");
}

然后将此库导入arduino ide,在arduino ide中编译此项目,编译完成后即可在编译目录中生成我们需要的.a文件,将.a和.h提取出来,编译文件夹在系统临时文件夹中
QQ截图20200629094737.png

制作库文件

上面生成.a文件后。提取出.a文件,新建一个库拷贝和上面相同的文件,删除功能实现文件.cpp,只保留.h文件,文件结构如下:

├─examples
│  └─TEST
│          test.ino
└─src
    │  test.h
│  keywords.txt
│  library.json
│  library.properties
│  LICENSE
│  README.md
│

修改library.properties文件,删除dot_a_linkage=true,添加一行precompiled=true

name=TEST_Library
version=1.0.0
author=rousir
maintainer=rousir
sentence=Arduino libary
paragraph=
category=demo
url=https://github.com/rousir
architectures=*
includes=test.h
precompiled=true

然后在src文件夹中创建一个生成muc名称的文件夹,把.a文件放入其中,导入ide库文件夹后。ide自动识别链接.a文件。
[   DISCUZ_CODE_0   ]
QQ截图20200629100139.png
mcu文件夹名称不知道,创建库后使能precompiled=true编译ide debug栏会提示mcu名称。
Z[HDYJFWS965BGS3C1`H`OL.png
这时该款mcu的静态库就制作完成了,如果要多款mcu,按照同样方法制作即可,制作好库之后就可以给其他人使用此方法适用于1.8.5以后版本

参考文档

https://arduino.github.io/arduino-cli/library-specification/






TEST_Library (1).zip

3.45 KB, 下载次数: 36

生成示例

TEST_Library(2).zip

9.19 KB, 下载次数: 20

导入示例

该用户从未签到

发表于 2020-7-16 11:49 | 显示全部楼层
学习一下,谢谢分享

该用户从未签到

发表于 2021-9-26 17:56 | 显示全部楼层
关于8266下载网上图片示例有没有?之前示例是下载百度LOGO成功了,但下载其它网页的就没有成功过,什么原因呀?能不能帮忙抽空解答一下,谢谢!!!

该用户从未签到

 楼主| 发表于 2021-9-26 17:58 | 显示全部楼层
zhqyhwan 发表于 2021-9-26 17:56
关于8266下载网上图片示例有没有?之前示例是下载百度LOGO成功了,但下载其它网页的就没有成功过,什么原因 ...

需要bmp格式的图片,然后分辨率需要一样

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2021-10-12 17:14 | 显示全部楼层
谢谢分享,赞赞赞
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

esp8266  Node mcu多用 含土壤温湿度和DHT11和四路继电器
esp8266 Node mcu多用 含
原来有空气湿度 和四路继电器 现在新加了土壤湿度的在这个里面 这个是为什么?
ArduinoBox
ArduinoBox
这个软件具体是做什么用的? 可以导入程序进行模拟吗?
按键个数上限
按键个数上限
使用ESP32 arduino 蓝牙开发时,设置了许多按键,前12个没有问题,之后的都不会响应如
ESP32 S2 的 SPI
ESP32 S2 的 SPI
ESP32 S2的Arduino环境对于 SPI 的定义是有问题的。 打开ESP32-S2技术参考手册 (“es
啃萝卜可不可以用于arduino UNO R3 开发板
啃萝卜可不可以用于arduin
啃萝卜可不可以用于arduino UNO R3 开发板
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表