静态库与动态库的制作
作者:互联网
静态库
程序所要用到的库函数代码在链接时全部被copy到程序,如果有多个进程在内存中同时运行,并且使用了相同的库函数,那么就会有多份拷贝,这就是对空间的浪费。(静态链接库以*.a为后缀)
建立mylib.c
int add(int a,int b) { return a+b; }
编译文件并输出目标文件
gcc -c mylib.c -o mylib.o
将编译出的mylib.o文件打包成静态连接库
ar cqs libmylib.a mylib.o
将libmylib.a文件复制到/usr/lib目录下
cp libmylib.a /usr/lib
调用静态库文件 main.c
#include <stdio.h> int main() { printf("1+3=%d\n",add(1,3)); return 0; }
编译运行
gcc -static -lmylib main.c -o main ./main
参数:
"-c":编译选项,只对程序做编译,不链接。
"-static":编译选项,静态编译程序。
"-l":编译选项,指定被编译的程序所依赖的库文件。
ar cqs lib(静态库名).a 被制作的库文件(*.o)。
动态库
1.建立boye.c int reduce(int a,int b) { return a-b; } 2.编译文件并输出目标文件mylib.o gcc -c boye.c -o boye.o 3.将boye.o 制作成动态链接库,执行命令 gcc -shared -fPIC boye.o -o liboye.so 4.将liboye.so动态链接库文件复制到/usr/lib目录下 5.编译 gcc main.c -o main -lboye
总结:
readelf -d 可执行程序:查看可执行程序使用了哪些动态链接库。
gcc -shared -fPIC(库文件名).o -o(动态链接库文件名).so :将库文件制作成动态库。
-fPIC:使输出的对象模块是按照可重定位地址方式生成的。
-shared:指明产生动态链接库。
标签:文件,gcc,main,mylib,静态,编译,int,动态,制作 来源: https://www.cnblogs.com/boye169/p/14433302.html