注明:资料部分来源于网络
代码编译运行过程:
源码.c->(预处理)->预处理过的.i源文件->(编译)->汇编文件.S->(汇编)->目标文件.o->(链接)->elf可执行程序
一、静态链接库与动态链接库
静态链接库
通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static libaray),通常文件名为“libxxx.a”的形式。
其实,我们也可以把对一些库函数的链接载入推迟到程序运行时期(runtime)。这就是如雷贯耳的动态链接库(dynamic link library)技术。动态链接库的名字形式为“libxxx.so” 后缀名为 “.so”
其实,我们也可以把对一些库函数的链接载入推迟到程序运行时期(runtime)。这就是如雷贯耳的动态链接库(dynamic link library)技术。动态链接库的名字形式为
动态链接库
动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分,换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码,当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝