静态库和动态库生成教程
1.静态库
私家车放在哪里都可以,编译的时候装载进来。不占用调用时间,代码占用体积大。 名称格式:
linxx.a,其中xx 指代库名
1.生成需要的.o文件 2.生成libxx.a静态库
ar -cr libxx.a yyy.o ///yyy需要的.o文件名
3.发布库的头文件和库到指定路径
/usr/local/include //头文件发布路径 /usr/local/lib //.a发布路径
4.使用生成的静态库生成可执行文件main
gcc -L /usr/local/lib -o main main.c -lxx -l 后面是当前库的位置,库之间有依赖关系,必须在最后
5.结果如下:
2.动态库
公交车,到规划好的站点才能停车。又被称为共享库 会放在特定的位置,供多个程序访问; 如果动态库和静态库重名且都被链接,则会优先链接动态库;
名称格式:
libxx.so
1.生成动态库
gcc -shared -fpic -o libxx.so yyy.c -shared:生成动态库 -fpic:位置无关代码 libxx:生成的动态库名 yyy.c:以来的.c程序
3.发布库的头文件和库到指定路径
/usr/local/include //头文件发布路径 /usr/local/lib //.a发布路径
4.将动态库路径添加到/etc/ld.so.conf 5.使修改后的配置生效
/sbin/ldconfig
6.生成可执行文件main
gcc -I/usr/local/include -L/usr/local/lib -o ... -lxx -I:后面加库头文件路径,如果是标准路径,可以省略 -L: 后面加动态库文件路径,如果是标准路径,可以省略 ...:要生成的内容以及依赖的.c文件 xx:指定的动态库
6.结果如下 7.打印可执行文件用到动态库
ldd - print shared library dependencies //打印用到的动态库
可以看到多链接了动态库;
3.非root用户发布
cp xx.so ~/lib export LD_LIBRARY_PATH=~/lib
4.多个有依赖关系的文件封装成动态库
其中,stack.c中包含llist.h头文件
1.生成动态库 llist.o在之前例子中已经生成并被放入指定路径; 2.发布库的头文件和库到指定路径 3.添加新库后,重启配置 4.修改main.c中的头文件 旧: 新: 5.生成可执行文件,注意依赖关系 被依赖的库放在依赖库的后面 6.结果如下: 6、查看可执行文件依赖的动态库