老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

静态库和动态库有什么区别?老男孩Linux运维培训

老男孩IT教育

行业新闻

2021年8月4日 17:27

在Linux中,我们编写代码的时候经常用到已有的接口,它们是通过库的形式来提供给我们使用的,常见形式有两种,一种是以.a为后缀,这也就是静态库;另一种则以.so为后缀,这也就是动态库,那么同为库,这两者的区别在哪呢?我们又该如何使用如何选择呢?请看下文:

       在Linux中,我们编写代码的时候经常用到已有的接口,它们是通过库的形式来提供给我们使用的,常见形式有两种,一种是以.a为后缀,这也就是静态库;另一种则以.so为后缀,这也就是动态库,那么同为库,这两者的区别在哪呢?我们又该如何使用如何选择呢?请看下文:

Linux运维

       首先我们需要了解下什么是目标文件,目标文件常按特定格式来组织,在Linux下,是ELF格式,即可执行可链接格式,在Windows操作系统下,则是PE格式,即可移植可执行。

       通常目标文件有三种形式:

       1、可执行目标文件:也就是我们通常所说的,可以直接运行的二进制文件。

       2、可重定位目标文件:包含了二进制的代码和数据,可以与其他可重定位目标文件合并,并创建一个可执行目标文件。

       3、共享目标文件:是一种在加载或运行时进行链接的特殊可重定位目标文件。

       静态库是什么?可冲定位目标文件以一种特定的方式打包成一个单独的文件,并且在链接生成可执行文件时,从这个单独的文件中拷贝自己需要的内容到最终的可执行文件中,这个单独的文件,被称为静态库,Linux中通常以.a(archive)为后缀。

       动态库是什么?动态库可静态库类似,但是它并不在链接时将需要的二进制代码都拷贝到可执行文件中,而是仅仅拷贝一些重定位和符号表信息,这些信息可以在程序运行时完成真正的链接过程,Linux中通常以.so(shared object)作为后缀。

       有什么区别呢?

       1、可执行文件大小不一样:静态链接的可执行文件比动态链接的可执行文件要大得多,因为它将需要用到的代码从二进制文件中拷贝了一份,而动态库仅仅是复制了一些重定位和符号表信息。

       2、占用磁盘大小不一样:如果有多个可执行文件,那静态库中的同一个函数的代码就会被复制多份,而动态库只有一份,因此使用静态库占用的磁盘空间相比动态库要大。

       3、扩展性与兼容性不一样:如果静态库中某个函数的实现变了,那么可执行文件必须重新编译,而对于动态链接生成的可执行文件,只需要更新动态库本身即可,不需要重新编译可执行文件。

       关于“静态库和动态库有什么区别”介绍到这里就结束了,作为IT教育人才服务平台,老男孩教育一直专注于Linux运维人才的输出服务,有效引导了学员的前进方向,让他们少走弯路,帮助更多人了解Linux技术。想深入的学习Linux云计算运维的知识,可以关注下老男孩教育。

       推荐阅读:

       shell是什么?如何进行连接的?老男孩Linux学习

      运维工程师必须要知道的Linux知识有哪些?Linux学习

       Linux是什么?有哪些特点?Linux学习

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。