动态库和静态库的感性认识:

动态链接:

学校里不让带电脑,要打游戏,无法自己实现,只能跑到网吧里打

程序执行之前:

获取动态库的位置,将程序与动态库进行链接

到了学校里,向学长打听好网吧的位置,牢记于心

程序执行时:

程序运行到某一行,到之前链接的动态库中寻找相应的函数的实现方法

想打游戏的时候,就按照学长给的地址去到网吧,并在里面开一个机子,网管给出机子的号码,在网吧里根据号码找到自己的机子

优点:各个程序共享同一个库,可以节省资源,程序的体积相对小

缺点:必须依赖外部库,如果库缺失,会导致几乎所有的程序失效

静态链接:

学校里让带电脑,要打游戏的时候,只要自己有电脑,就能打,但是前提是自己把电脑带到了学校里

程序执行之前:

将库(静态库)中的对应的代码提前拷贝到自己的程序里

在程序执行时:

遇到需要的函数的实现时,直接在拷贝好的代码里找就可以了,不依赖库

优点:不依赖外部库,程序可以独立执行

缺点:浪费资源,程序的体积相对大

Linux默认进行动态链接

如果要进行静态链接,要在指令后加-static

CT-20230411135740 Redacted

mytest可执行程序是通过动态链接生成的,mytest2是通过静态链接生成的,可见二者相差100倍的大小,而且两者的功能还只是输出一句”hello world”