欢迎光临散文网 会员登陆 & 注册

C语言----创建工程库最佳选择(CSEN-e小白管理员-Half_word编写)

2020-05-24 17:31 作者:e小白官方  | 我要投稿

咕咕咕,这阵子事情有点多… …

===========================================================

正文:

C语言----创建工程库最佳选择

  前阵子有童鞋问:“我写了一些功能很不错的代码;结果做课设了同学过来找我想借用,但是我又不想开源它们……。”于是引出来今天的主角”静态库”or”动态库”。

  先简单进行一下科普:

1.静态库和动态库是什么?

动态库:动态库提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 文件中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。

静态库:静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。

 

不难看出,动态库貌似是一个大的“花心萝卜”,明明只有一个副本,却让同时访问的进程都以为这是它独有的库,最后运行的时候才进行载入。没错,这操作就是Windows专业手法;每个在windows上运行的进程也以为它独占了整个内存(实际上那都是线性地址)。

静态库相比之下就老实多了:每个使用它的进程都直接复制一份所需的代码,大家在生成可执行文件之前就明确了一一对应的关系。

上述两种库也体现出软件工程对于空间与时间的一种平衡取舍,静态库牺牲了空间,赢得了空间;动态库反之。另外值得一提的是使用动态库的程序不能离开动态库;所以经常在Windows下可以看到报错:缺少xx.dll。而静态库生成的程序就不存在这种限制了,为嘛?人家在运行之前加载进了程序。

2. 如何构建?

作为一个C语言热爱分子表示,做这种东西小菜一碟!

巴特,首先你得有一个运行环境……

本文主要以Windows与Linux两大系统为例(MCU小伙伴莫慌,Keil也可以使用lib文件的;传送门:https://blog.csdn.net/yunfeiyang62/article/details/47211209

Linux:

首先讲Linux,比起Windows来使用,因其操作更加简单。首先装机必备gcC;然后创建一个头文件(存放你的各种定义,以及函数原型声明);然后再将你的函数实现写入另外一个.c文件。

如下图1:

CSEN-e小白管理员-Half_word编写

Windows:

作为微软主要的阵地,首先你得准备好一个VS2019(其它版本也可以,或者直接Keil)。

还是和linux里面一样建立一个头文件与.c文件。先保存好;再打开VS创建一个静态库工程或者是一个动态库工程。

库项目直接写在里面你的库函数,官方给了一套模板,要是觉得名字不好听右键>重命名(记得将头文件一并修改,还有将项目属性里面的也一并修改)

最后在工程目录的DEBUG目录下找到生成的.lib或.dll;取出并且与头文件一并打包。

3.如何使用?

由于Windows下使用较为复杂(keil中比VS来的简易),用文字描述过于繁琐

笔者给出传送门https://www.bilibili.com/video/BV1Kt411775b,自行探索。

仍然以Linux为例:

将你的.a与.so都用mv指令移动到/usr/lib/下;然后输入ldconfig建立连接关系。

创建一个mian.c,用#include “HelloH.h”包含前面写的头文件,然后把你需要的函数调用就好了。保存。

再输入:gcc -I./ main.c -lHello -o LibMain.out//使用静态库

               gcc -L./ main.c -lHi -o SoMain.out//使用动态库

接着就可以执行查看效果了。

4. 如何分享?

其实说到这个,我们不妨打开电脑上随意一个程序得安装路径,可以看到:一堆的.dll或者.lib,有的是在lib文件夹中。

如果想给别人使用就创建两个文件夹吧include、lib;头文件送入include,库文件则放在lib。最后写个README,压缩出包,大功告成!


C语言----创建工程库最佳选择(CSEN-e小白管理员-Half_word编写)的评论 (共 条)

分享到微博请遵守国家法律