参考文章:arduino .a静态库制作和使用
https://arduino.github.io/arduino-cli/0.19/library-specification/
.a静态库文件
.a
文件即静态库文件,静态库文件把.o
文件打包,一方面易于移植使用,一方面可以保护源码不被反汇编或者被泄露。
ps:arduino推崇开源共享,非必要情况下建议大家开源源码,使用他人库制作静态库需遵循开源许可。
1 生成.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.c******/
#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提取出来,编译文件夹在系统临时文件夹中。
我是直接把文件夹复制到libary
目录下:
打开examples
中的项目,进行编译
编译成功后,在C:\Users\[用户名]\AppData\Local\Temp
目录下找到build的目录
2 使用库文件
上面生成.a
文件后。提取出.a
文件,新建一个库拷贝和上面相同的文件,删除功能实现文件.cpp
,只保留.h
文件,文件结构如下:
修改library.properties
文件,删除dot_a_linkage=true
,添加一行precompiled=true
然后编译。
发现错误:
需要把.a
静态库放在mcu命名的目录下:
再次编译,就完成了。