如何将.a文件导入单片机中?

如何将.a文件导入单片机中?,第1张

打开所要导入源文件的功能块

1、环境:window10。

2、安装gcc工具,在这,我安装了mingw这个工具。

单片机中代码生成.a文件

1、首先要把.c文件生成.o文件

2、然后再把.o文件生成.a文件。

具体 *** 作步骤如下:

(1)编译生成.o目标文件,如:gcc -c test.c

注:-c选项表示只编译生成.o目标文件.

(2)使用ar命令生成.a库文件,如ar -rv test.a test.o

注:ar命令可以用来创建、修改库,也可以从库中提出单个模块。

r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。

如果若干 模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。

默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。

v: 该选项用来显示执行 *** 作选项的附加信息。

注:我们可以跳过第一步,直接使用VSGDB生成的.o文件执行第二步。

需要使用到的Dos命令:cd 跳转 dir查看(相当于linux下的ls) cls清屏(相当于linux下的clear)

单片机,全称单片微型计算机,又称微控制器,是把中央处理器、存储器、定时/计数器、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。

单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit), 常用英文字母的缩写MCU表示单片机,单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。单片机由运算器,控制器,存储器,输入输出设备构成,相当于一个微型的计算机(最小系统),和计算机相比,单片机缺少了外围设备等。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。它最早是被用在工业控制领域。

单片机

单片机

由于单片机在工业控制领域的广泛应用,单片机由仅有CPU的专用处理器芯片发展而来。最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。

1.创建静态库工程,工程命名为BaseSDK,生成的.a文件名变成libBaseSDK。

2.删掉自动生成的文件BaseSDK.h  BaseSDK.m

3.添加你的实用类文件

4.添加Headers Phase

5.将暴露给外面用的头文件加入进来,加进来后要移到public中去(不移到public中也没错,只是下面第11步中不会出现.h文件,需要从库的源码中找)

6.然后设置编译模式,打开Xcode菜单Product--->Scheme--->Edit Scheme,改为release模式,因为最终打包是要用release模式

7.设置Build Active Architecture Only

模拟器:iPhone4s~5 : i386 iPhone5s~6plus : x86_64

真机:iPhone3gs~4s : armv7 iPhone5~5c : armv7s iPhone5s~6plus : arm64

如果Build Active Architecture Only设置为YES,那么编译出来的.a静态库就只包含当前设备的指令集。

举个例子:如果我们选择iPhone 5模拟器编译,则编译出来的.a静态库只能用iPhone4s~5模拟器跑程序,用iPhone5s~6plus,则会报找不到x86_64的APPBaseSDK库。

设置为NO,则会把所有指令集的都打包合并。因此静态库有个缺点就是静态库包比源码大很多。

8.设置最低支持版本

9.编译生成静态库

编译时,需要用模拟器和真机各编译一次,这样Products目录下的libBaseSDK.a静态库才会变为黑色,右键show in Finder,可以进入Products目录下。

10.合并模拟器和真机静态库文件libBaseSDK.a,打开终端命令如下

lipo -create /Users/zhanglinfeng/Library/Developer/Xcode/DerivedData/BaseSDK-cexmrzesjuswutaldkedwjpnpxnk/Build/Products/Release-iphoneos/libBaseSDK.a /Users/zhanglinfeng/Library/Developer/Xcode/DerivedData/BaseSDK-cexmrzesjuswutaldkedwjpnpxnk/Build/Products/Release-iphonesimulator/libBaseSDK.a -output /Users/zhanglinfeng/Desktop/libBaseSDK.a

11.使用.a静态库

将静态库拖入新建的工程,我这里拖到下图箭头所指的UseA文件夹下(如果你要拖到其他目录,就要改Library Search Paths,后面我会介绍Library Search Paths路径相关知识),再将暴露给外面用的.h文件也拖入工程,

注意:如果没有include里的.h文件.那就从库的源码中挑出一些需要暴露的.h文件。

导入头文件就可以使用了,如下图

注意:如果要用到静态库中的category方法,需要设置Other Linker Flags为-ObjC(注 意大小写,有些资料里大小写搞错了坑死我了)。引入了-ObjC标志,它的作用就是将静态库中所有的和对象相关的文件都加载进来本来这样就可以解决问题 了,不过在64位的Mac系统或者iOS系统下,链接器有一个 bug,会导致只包含有类别的静态库无法使用-ObjC标志来加载文件。变通方法是使用-all_load 或者-force_load标志,它们的作用都是加载静态库中所有文件,不过all_load作用于所有的库,而-force_load后面必须要指定具 体的文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11605424.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存