起因
我本人是不喜欢用这些什么库的,代码就是要开源才能大家一起进步,但是,这些终究只是极客幻想。现在还是打工仔呢,等日后有机会开工作室、独立研发或者商单的时候,在考虑这种事情吧。那么公司的代码,肯定就是要保密啦。保密的办法就是转为库
a静态库
静态库windows是.lib linux是.a文件,这两种静态库的二进制格式不一样,所以不能相互使用。
a静态库生成
1 | gcc –o mylib.o –c mylib.c |
a静态库使用
这个就非常简单了,就是把头文件添加到项目中,然后添加库文件到项目中,然后#include “mylib.h”即可。然后根据头文件中的数据和函数进行调用即可
so动态库
linux和UNIX的动态库一般是.so,这个好处就是,不用编进代码之中,缺点就是想要终端或者平台提前准备好动态库文件哦。#动态库库生成 #可以考虑写成makefile文件或者shell文件
windows的动态库一般是dll。
so动态库生成
1 | gcc –fPIC -o mylib.o -c mylib.c #(生成符号表) |
so动态库使用
1 | 方法一 |
1 | #方法二 |
lib静态库
1 | #方法一 打开cmd |
#方法二 打开keil 直接勾选output中的生成lib文件,生成库的时候不要把main和h文件添加进来,main是最好不要,因为可能冲突。h文件可有可无。然后点击编译即可。
使用方法和.a文件是一样的
dll动态库
我们一般使用vs或者devC++那些ide就可以生成了,虽然使用gcc命令行也可以实现编译,但是毕竟别人ide做了适配啥的,还是一键搞定方便。用vs举例子,点击生成新的动态库项目,然后在解决方案中的源文件和头文件目录中,添加需要的代码。然后选择X64模式,release版本,编译就可以了。然后就生成了dll文件lib文件,把这两个+代码头文件复制到新的项目所在的目录中。新的项目可以使用vs的控制台模式项目,然后在解决方案的资源文件中添加lib文件,不是dll文件哦,再把头文件添加到头文件目录中。然后声明头文件,调用即可。
cpp文件编写
1 | #include "pch.h" //必要的头文件 |
h文件编写
1 |
|
对了vs还可以选择静态库项目,也是生成lib文件,使用的话,就是在解决方案的资源文件
中添加lib文件就可以了。自然也是可以gcc生成了,谁没事找事呢(doge)
结语
有些公司会选择visual GDB来进行开发stm32,这个时候就是linux的静态库,自然keil才是开发stm32的主流,所以还是使用的.lib文件,自然两者都会终究是好的