美文网首页
2018-07-23 什么是库?(linux平台下的理解)

2018-07-23 什么是库?(linux平台下的理解)

作者: 予汐 | 来源:发表于2019-10-27 15:11 被阅读0次

我所认为的库,就是里面有许多的库文件。而库文件的特点是:你可以使用它,但你不能看到它是如何实现的。因而库文件也赋予了库相同的特性。大家一定很迷惑为什么要赋予库文件和库这样的特性。那是因为库文件里面一般是一种技术的核心代码。为了将这种技术出售出去,供别人使用,但又不希望泄露自己的技术。于是便赋予了库这个特性。这也是我们为什么学习库的原因。

 知道了库的重要性,那我们就要知道库在哪里?linux下库主要处于/lib和/usr/lib目录中。两者的区别在于:

 /lib  指系统运行相关的库文件

 /usr/lib  一般指第三方软件的库文件

 了解了库的重要性,位置。那我们就要了解库的种类了。库有两种类型。分别是静态库和动态库。我们要区别两者的不同,就先看它们的定义。

 静态库: 在执行程序之前就加入了到了执行代码中,成为执行程序的一部分,一般是以.a为文件后缀。

 动态库: 在执行程序启动时加载到执行代码中,一般是以.so为文件后缀。

 从静态库,动态库的定义中,我们可以知道两者的优缺点:

 (1)动态库的编译时间短。

 (2)静态库的执行时间短。

 (3)静态库代码太拥挤,不易升级。

 (4)静态库代码的布置比较好。

当我们了解到库有两个种类,那我们该如何选择呢?什么时候选择静态库,什么时候选择动态库?这主要从两个方面进行选择。

 第一点,根据软件是否经常升级,若经常升级,则选择动态库。

 第二点,封装代码的大小,若代码过大,选择静态库。

 了解到库的重要性,库的位置,以及库的种类,接下来,我们就要学会如何建立一个库和如何使用一个库?

 在建立一个库,以及使用一个库时,我们需要使用一些指令,让我给大家慢慢介绍。

 静态库的建立与使用:

 建立:     gcc -c  test.c       (将c文件生成.o文件)

ar    rcslibtest.a test.o   (将.o文件生成libtest.a静态库。其中lib 和.a是静态库的前缀和后缀。中间  test  才是静态库的名)

 使用:   gcc main.c  libtest.a   或者  gcc  main.c   -ltest   -L.

                  -l  指链接库,其中test是库名。

                  -L 指链接的路径

                  .   指当前目录   

    动态库的建立与使用:

    建立:     gcc  -shared  -fPIC  -otest.so  test.c    (其中test是库名)

    使用:     gcc main.c   ./test.so  -o    可执行文件名

了解到了动态库,以及静态库,我就觉得有必要向大家介绍一下什么是静态编译,什么是动态编译?

 静态编译:静态编译,就是编译器在编译可执行文件的时候,将可执行文件需要调用的对应动态链接库(.so或.lib)中的部分提取出来,链接到可执行文件中去,使可执行文件在运行的时候不依赖于动态链接库。

 动态编译:动态编译的可执行文件需要附带一个的动态链接库。在执行时,需要调用其对应动态链接库中的命令。

 从二者的定义,我们可以知道他们的优缺点:

 动态编译一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没有安装对应的运行库,则用动态编译的可执行文件就不能运行。

 静态编译正好和动态编译互补。

相关文章

网友评论

      本文标题:2018-07-23 什么是库?(linux平台下的理解)

      本文链接:https://www.haomeiwen.com/subject/mcldmftx.html