静态库和动态库的创建

静态库的创建步骤:
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参数时,连接器默认是链接动态库。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值