GCC 编译的流程:
可执行文件 a.out
静态库 static_dll
动态库 dynamic_dll
静态库
说明:在编译阶段,函数库的代码已经被载入可执行文件中,整个函数库的所有数据都会被整合进 目标代码。
优点 :编译后的执行程序不需要外部的函数库支持
缺点 :生成的文件比较的大,若是函数库的代码改变了,则需要重新编译
特点 :静态库的代码在编译过程中已经被载入可执行程序,因此生成的可执行体积较
大。
图示
动态库
说明:动态库是动态链接的动态库动态函数库在编译的时候并没有被编译进目标代码中,而是在运行的时候,才来链接我们的函数库中你用到的函数。因此动态函数库所产生的可执行文件比较小
由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运
行环境中必须提供相应的库,以及库路径。
特点 :动态库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单
的引用,因此可执行代码体积较小。
总结 :
1.我们知道当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。
2.对动态库而言,动态库会在执行程序内留下一个标记指明当程序执行时,首先必须载入这个库。
3.由于动态库节省空间,linux 下进行连接的缺省操作是首先连接动态库,也就是说,如果同时
存在静态和动态库,不特别指定的话,将与动态库相连接。