备案 控制台
学习
实践
活动
专区
工具
TVP
写文章
专栏首页 ClearSeve 静态库和动态库的区别
2 0

海报分享

静态库和动态库的区别

问题

静态库和动态库有什么区别?

回答

后缀名不同

动态库的后缀,在 Windows 上是 .dll ,linux 上是 .so ,在 OSX 上是 .dylib

静态库,在 WIndows 上是 .lib ,linux 上是 .a

可执行文件大小不一样

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

扩展性与兼容性不一样

如果静态库中某个函数的实现变了,那么可执行文件必须重新编译,而对于动态链接生成的可执行文件,只需要更新动态库本身即可,不需要重新编译可执行文件。正因如此,使用动态库的程序方便升级和部署。

依赖不一样

静态链接的可执行文件不需要依赖其他的内容即可运行,而动态链接的可执行文件必须依赖动态库的存在。所以如果你在安装一些软件的时候,提示某个动态库不存在的时候也就不奇怪了。

即便如此,系统中存在一些大量公用的库,所以使用动态库并不会有什么问题。

加载速度不一样

由于静态库在链接时就和可执行文件在一块了,而动态库在加载或者运行时才链接,因此,对于同样的程序,静态链接的要比动态链接加载更快。所以选择静态库还是动态库是空间和时间的考量。但是通常来说,牺牲这点性能来换取程序在空间上的节省和部署的灵活性时值得的,再加上局部性原理,牺牲的性能并不多。

参考: https://zhuanlan.zhihu.com/p/71372182

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客: https://www.clearseve.com/ 复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。