目标文件
目标文件是由源代码编译而成的二进制文件 源代码是供开发者阅读的文本文件,它的体积大,而且本质上都是文本,无法直接被机器使用,所以需要先编译为目标文件 一个源代码文件,经过编译就会对应生成一个目标文件
静态链接库
供主程序代码调用的库文件,在编译时,静态链接库里面的功能都会被打包到主程序里,成为主程序的一部分
动态链接库
供主程序调用,需要跟随主程序一起发布,到运行时才会被动态调用
动态库英文名称为Shared Library,又叫共享库
可执行文件
能够被操作系统调用,直接启动一个应用进程的文件
关联
静态链接库,动态链接库和可执行文件,都是由目标文件链接而来,只是设计用途不一样
静态链接库和动态链接库的特征对比
- 静态库会被编译进主程序,不用担心库丢失的问题,适合到处拷贝独立运行,不依赖于外部环境,独立性强
- 但由于静态库的方式将所有的库代码都打包到主程序里面了,主程序体积就会增大
- 动态库的共享性强,比如Windows系统中的dll文件,可以被任意程序调用
- 由于Windows中的dll文件是共享的,其它程序就无需再包含了,因此动态库的方式有利于减小主程序体积
- 动态库的缺点同样明显,它依赖于外部环境,比如Windows系统中常见的dll丢失的问题,每个机子环境是不一样,到其它机子上可能就无法正常运行了
- 如果程序想要做成便携式,一个主程序可以到处直接运行的,适合静态库模式
- 如果希望程序模块可以动态升级的,适合动态库模式,只要替换对应模块的dll文件,就可以实现升级,其它文件都无需替换,主程序也不需要重启
文件格式
在Windows中,目标文件为.obj格式,静态链接库为.lib格式,动态链接库为.dll格式,可执行文件为.exe格式 在Linux中,目标文件为.o格式,静态链接库为.a格式,动态链接库为.so格式,可执行文件有.rpm等多种格式