静态链接:
指编译系统在链接阶段把程序的目标文件和所需的函数库文件链接在一起,这样生成的可执行文件可以在没有函数库的情况下运行,不过产生的可执行文件体积很大;
动态链接:
指编译系统在链接阶段并不把目标文件和函数库文件链接在一起,而是等到程序在运行过程中需要使用时才链接函数库,所以产生的的可执行文件体积比较小,但由于需要动态加载函数库而使得运行效率要低一点;
链接选择:
如果多个源文件都需要调用函数库时,应该选择动态链接,而只有少数源文件需要调用函数库时选择静态链接;
动态链接原理:
- 每个函数库都有自己的 链接参数 ,比如数学库
<libm>
的链接参数为 m ,<libpthread>
库的链接参数为 pthread 等,使用符号-l
进行链接,比如链接数学库为-lm
; - 使用动态链接方式编译程序时,动态库的符号链接文件会写入二进制文件中,这样,程序在运行时就可以通过符号链接文件找到指定的动态库文件了;