静态库和动态库生成教程

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、查看可执行文件依赖的动态库

经验分享 程序员 微信小程序 职场和发展