查看: 929|回复: 1
打印 上一主题 下一主题

arduino .a静态库制作和使用

[复制链接]
  • TA的每日心情
    慵懒
    2018-11-12 08:58
  • 签到天数: 37 天

    [LV.5]常住居民I

    跳转到指定楼层
    楼主
    发表于 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提取出来,编译文件夹在系统临时文件夹中

    制作库文件

    上面生成.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   ]


    mcu文件夹名称不知道,创建库后使能precompiled=true编译ide debug栏会提示mcu名称。

    这时该款mcu的静态库就制作完成了,如果要多款mcu,按照同样方法制作即可,制作好库之后就可以给其他人使用此方法适用于1.8.5以后版本

    参考文档

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






    TEST_Library (1).zip

    3.45 KB, 下载次数: 4

    生成示例

    TEST_Library(2).zip

    9.19 KB, 下载次数: 2

    导入示例

    该用户从未签到

    沙发
    发表于 2020-7-16 11:49 | 只看该作者
    学习一下,谢谢分享
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    热门推荐

    5分钟带你快速了解新一代开发板:M5STACK
    5分钟带你快速了解新一代
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    Arduino UNO中文数据手册
    Arduino UNO中文数据手册
    2018.9.23重新翻译整理 转载请注明来自Arduino中文社区,并附本帖链接 本帖地址:http
    LabVIEW监控温度传感器
    LabVIEW监控温度传感器
    这里涉及 dht11 数字温度湿度传感器模块、TM1637数码显示模块、LabVIEW。 功能
    黑乌鸦的Arduino兵器库-----DS1302时钟模块
    黑乌鸦的Arduino兵器库---
    嗯 这是一个系列后期会罗列几乎所有的常见基础模块的demo所以 大家的回复将是我最大
    中文 字库 的8针 OLED 12864模块 arduino
    中文 字库 的8针 OLED 128
    屏幕电路SPI连线: 中文字库OLED Arduino UNO GND GND
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表