静态库动态库的生成与使用 :【 多图预警 】
本节课重要的原因:以后的使用大多数都是使用现成的动态库和静态库,在本文章我们以加法add()函数建一个动态库和静态库,分过程讲解动态库和静态库的生成与动态库使用。,使用动态库讲述链接与运行加载库的过程(静态库的链接与动态库一样,不一样的是静态库运行时不需加载静态库)
库文件: 把所用到的所有代码的实现打包成一个文件。库中的代码没有main函数(和可执行程序的区别)
动态库的生成
动态库的命名:一般的动态库命名:lib().so 。 ()里面是动态库起的名字,以lib作为开始,以.so表明它是动态库
生成动态库:使用gcc
第一步: gcc-fPIC -c add.c -o add.o
第二步: gcc --share add.o -o libadd.so
讲解:gcc -c add.c -o add.o 普通的来讲 gcc add.o -o add 生成可执行程序了 没有main函数就会报错,有了main函数就不能生出库
所以:要写成gcc --share add.o -o add.so的形式
动态运行的时候加载,加载到内存之后,需要在多个程序中都要去使用。这样我们需要理解一个程序的运行需要将内存中的代码和数据映射到进程虚拟地址空间中映射到虚拟地址空间去才能访问,这个动态库需要映射到各个库独立的虚拟地址空间中去才能被访问,生成库的时候有自己的信息,映射的时候 ,无法保证每个程序都将它映射到虚拟地址空间中的同一位置,所以动态库就不能用于每个程序,所以要加上fPIC 产生位置无关的代码,库映射到虚拟地址空间的同一位置,每一个函数进行计算的时候拿偏移量+首地址就能得到,便于映射到每一个程序中(了解)。
在这里 我们把加法函数建一个动态库和静态库去使用和讲解
新建一个add.c文件
1 #include <stdio.h>
2 int main