Linux静态库和动态库

静态库:

静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中的这种库。当然,程序运行的时候将不再需要这种库。
这类库的名字一般是libxxx.a,xxx为库的名字。利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,它的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。

静态库的使用:

静态库的操作工具:gccar
接下来谈谈静态库的使用:

  • 编写几个.c文件

这里写图片描述

  • 生成静态库
    这里写图片描述
[root@localhost test]# ar -tv libmath.a //查看静态库中的目录列表
rw-r--r-- 0/0    683 Mar 24 20:42 2018 add.o
rw-r--r-- 0/0    687 Mar 24 20:42 2018 sub.o

我们再来测试一下这个静态库可不可以用,编写一个主函数
这里写图片描述

-L 及-l 参数放在后面.其中,-L 后面跟加载库文件路径,-l 指明库文件名字。
这里写图片描述
我们可以看到,运行出了结果


动态库:

动态库又称动态链接库,是一个包含可由多个程序同时使用的代码和数据的库,它不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 动态库中,该 动态库包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。动态库还有助于共享数据和资源。多个应用程序可同时访问内存中单个动态库副本的内容。
动态库的名字一般是libxxx.so;相对于静态函数库。动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。动态函数库的改变并不影响你的程序,所以动态函数库的升级比较方便。

动态库的使用:

同样还是刚才的例子,我们来生成动态库
  • 先生成目标 .o文件
    这里写图片描述

  • 再生成 .so 文件
    这里写图片描述

使用动态库:

同静态库一样,-L后面跟库文件路径,-l后面跟名称
这里写图片描述

运行动态库
  • 拷贝 .so 文件到系统库文件路径下,一般是/usr/lib
  • 更改LD_LIBRARY_PATH
  • ldconfig配置/etc/ld.so.conf.d/ ldconfig更新

运行动态库一共就如上三种方法,在这里就演示第二种
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34021920/article/details/79229377
今日推荐