静态链接 (Static Linking)
时机:在程序编译/链接期完成。
行为:链接器将程序所有用到的静态库(
.a/.lib)中的代码和数据,直接复制到最终的可执行文件中。最终生成的是一个完全自包含的独立文件。
动态链接 (Dynamic Linking)
时机:发生在程序运行时(或系统加载时)。
行为:链接器在编译期只记录程序需要哪些动态库(
.so/.dll) 以及其中的哪些符号(函数、变量)。当程序运行时,操作系统的动态链接器负责找到所需的库并将其加载到内存中,再进行地址重定位,完成最终的链接。
优缺点
静态链接的优缺点
优点:
部署简单:程序是一个独立的整体,不存在依赖问题。
性能稳定:无运行时加载开销,函数调用性能确定。
缺点:
浪费空间:磁盘和内存空间都有浪费。
更新困难:库更新后,所有使用它的程序都必须重新编译和分发。
动态链接的优缺点
优点:
节省空间:磁盘和内存空间利用率高。
更新灵活:库可以独立更新,便于bug修复和安全漏洞修补。
便于模块化:支持插件系统,程序可以在运行时动态加载功能模块。
缺点:
依赖管理复杂:如果库版本不兼容或丢失,会导致程序无法运行。
轻微性能损耗:有运行时加载和链接的开销。
评论区