静态库的创建步骤:
1:编辑要生成的库文件:vim add.c
(在这里实现a+b的功能)
2:将库文件编译成目标文件.o gcc -c add.c -o add.o
3:将目标文件生成静态库ar rcs libadd.a add.o
(lib是前缀,add.a是想要生成的静态库的名字)
以上已经创建好了静态库。
4:编辑调用库函数vim test.c
5:将源文件编译成可执行文件gcc -static(不加默认是动态库)test.c -l(库文件名) -L(库文件的路径)
动态库的创建步骤:
1:编辑要生成的库文件:vim add.c
(在这里实现a+b的功能)
2:将库文件编译成目标文件.o gcc -c add.c -fpic
3:将目标文件生成动态库gcc add.o -o libadd.so -shared
以上已经创建好了动态库。
4:编辑调用库函数vim test.c
5:将源文件编译成可执行文件 gcc test.c ./libadd.so(动态库文件)
静态库和动态库的区别
1:静态库以.a作为后缀,动态库以.so作为后缀。
2:创建的是静态库时,把libadd.a文件mv到其他地方 test的可执行文件还能执行,
创建的是动态库时,把libadd.so文件mv到其他地方 test的可执行文件不能执行。
原因:当时用静态库时,链接器会找出程序中需要的库函数,然后把它们拷贝到可执行文件中去(找到一次就拷贝一次==>就会有重复),一旦链接成功,静态库就不需要了,因为可执行文件内已有库函数。(就是把libadd.a文件mv到其他地方 test的可执行文件还能执行)
使用动态库时,连接器是在可执行文件里留下一个标记,当执行可执行文件时,首先载入动态库。(就是把libadd.so文件mv到其他地方 test的可执行文件不能执行,路径变了)
3:所以动态库生成的文件比静态库生成的文件小。
4:在Linux下,如果缺少-static参数时,连接器默认是链接动态库。