创建C中的静态库和动态库以及他们的优缺点

Linux下库一般放在/usr/lib/目录下:

静态库(.a)与动态库(.so)。

Windows下为(.dll)。他集成了静态库和动态库的有点。

库的名字不包括前面的lib:

libtest.so,这个库的名字为test。

另外,库不需要加头文件,但需要编译生成目标文件。

=======================================================

制作静态库:

1.创建一个.c的函数功能文件,创建另一个main.c文件使用该文件,编译编写的功能库.c文件生成目标文件;
2.ar   -cqs   -o   libtest.a   test.o   #c:
创建静态库。 q:快速。 s:加上索引。 o:输出。后面加生成静态库名字要加前缀lib。这里的test.o就是想要加入静态库的test.c文件生成的目标文件。后面还可以加入更多目标文件。
3.gcc   main.c   libtest.a   -o   test #
一定要先写主函数文件,把静态库加到最后面。生成可执行文件test。
4. ./test
静态库的优点:可执行文件在系统任意位置可运行,可执行文件包含静态库文件。
静态库的缺点:库文件巨大且生成可执行文件占用空间较大(执行文件中包含主函数的库函数中的所有函数,而非只包含主函数所调用的函数)。

=============================================================

制作动态库:

1.创建一个.c的函数功能文件,创建另一个main.c文件使用该文件,编译编写的功能库.c文件生成目标文件;
2.gcc   -fPIC   -shared   test.o   -o   libtest.so #
生成动态库,fPIC(只有f小写):与地址无关。 shared:生成动态库。 o:输出。(test.o为功能文件的目标文件)
3.gcc  main.c  -L  ./  -l  test  -o  d_test        #-L:
指定动态库的路径,。/当前路机 -l:指定动态库的名字test,该步为链接动态库。(test为生成的动态库文件名)
4.export   LD_LIBRARY_PATH=./ #
用来指定一个变量的值的,变量名一定是LD_LIBRARY_PATH
5. ./d_test #
执行该文件
动态库的优点:相较于静态库生成可执行文件较小。
动态库的缺点:一定要将动态库于可执行文件一起移植才可保证运行。

(生成的执行文件只是调用动态库中的功能函数,而不会包含在执行文件中,因此执行文件会很小,不过,执行文件和动态库分开则不能运行)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值