【转】C语言如何编译动态库与静态库?


因为是别的论坛,不能直接转载,自己在这里再粘贴一下——
转载网址:https://www.2cto.com/kf/201711/699202.html

关于动态库与静态库的作用这里就不在详细赘述了,重点说一下如何编译动态库与静态库及使用,一些大型的程序一般拥有着良好的架构,各个功能模块之间能够相互协调工作,达到预期的效果,但有的程序并不是所有的源码都是自己编写,特别像是用到芯片厂商的提供的库;能够把这些融合起来的就是需要提供的库;

原料:test1.c test2.cmain.c

(详细的代码不再详细列出来,大家都是开发者,都希望用最短的时间找到想找的东西,而不是浪费太多的时间在细枝末节上)

1.如何编译动态库

gcc test1.ctest2.c -shared -fPIC -o libtest.so

使用动态库

gcc main.c -L.-ltest -o a.out

(

-L : 表示需要库的路径

-l:表示需要库的名称,如libtest.so,名称则为test

)

(ps:执行a.out时有可能提示找不到libtest.so文件,这时需要把库文件放入到/lib等目录下,或者添加环境变量LD_LIBRARY_PATH,包含有库文件的路径即可)

2.如何编译静态库

gcc -c test1.ctest2.c

ar -r libtest.atest1.o test2.o

使用静态库

gcc main.c-static -L. -ltest -o a.out

(

-static:可强制编译时使用静态库,如果不使用这个参数,而静态库与动态库同名的话,会优先使用动态库

)

3.静态库与动态库

在可执行程序执行条件上,使用静态库编译时,生成的执行文件就不再依赖.a静态库文件,而使用动态库编译的执行文件必须包含.so库文件才能运行;

在可执行程序的执行速度上,静态编译的文件会优于动态编译(毕竟静态编译把库文件的代码都编译到执行文件,与动态编译不同在执行动态库中函数时才会去路径下的动态库中寻找链接);

在可执行程序的大小上,静态编译后的文件大小比动态编译的文件大很多;如果对内存要求较高的可选择用动态编译,虽然会慢一点;

在修改库之后,静态编译的文件需要再把静态库和原main.c文件都重新编译才能使用,而动态编译的文件不需要再编译main.c,只需要把新编译的动态库覆盖原来的动态库,再重新运行可执行文件即可生效;相比于编译一个大型工程需要一两小时,动态库的优势就不必多言了;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值