【C语言】使用库和手动导入c源文件的区别

举报
王建峰 发表于 2021/11/19 04:17:14 2021/11/19
【摘要】 之前编写一类功能,封装fun.c fun.h文件放在同一个目录下面,然后在mian.c文件里 include "fun.h"。以为这样就叫做使用库,其实不然。这样的方式仅仅编写了库的源码,而没有生成库文件。什么意思呢? 如果仅编写源码,然后引用。这样只相当于是把源码复制大man.c文件中,把所有代码链接到了一起。实际上效率没...

之前编写一类功能,封装fun.c fun.h文件放在同一个目录下面,然后在mian.c文件里 include "fun.h"。以为这样就叫做使用库,其实不然。这样的方式仅仅编写了库的源码,而没有生成库文件。什么意思呢?

如果仅编写源码,然后引用。这样只相当于是把源码复制大man.c文件中,把所有代码链接到了一起。实际上效率没有提高。

 

如果将库的源码生成库文件(有静态库和动态库两种区别),然后再编译时引用,这样提高了代码的复用,效率也提升了。另外一个使用库的好处是,安全。因为库生成之后,不重新生成,它不变;而引用源码,稍加不注意,把源码改了,你的代码就出问题了。

为什么说,include <xxx.h> 是引用库,而 include "xxx.h"不是呢?

通常引用官方库(C库),这个会去链接c标准库,比较特殊。它自动给链接,而不用手动。
 

 

Linux - gcc静态库和动态库的创建过程


  
  1. 静态库
  2. 在链接时,复制代码段。运行时无需加载。故运行速度快;但是占用空间大。
  3. gcc -c hello.c -Wall 正常编译库
  4. ar crs libhello.a hello.o 创建静态库
  5. gcc -o test test.c -L. -lhello 编译时引用静态库(主c源文件里要进行函数声明)
  6. 动态库
  7. 不占用库中代码段的大小,且可以多个进程共享一个库;运行时需要动态加载。好处是,更新方便。
  8. gcc -c -fPIC hello.c bye.c -Wall 编译库时要使用 -fPIC <程序无关 参数>
  9. gcc -shared -o libcommon.so.1 hello.o bye.o 创建动态库
  10. ln -s libcommon.so.1 libcommon.so 添加软链接
  11. gcc -o test test.c -L. -lcommon 编译时引用动态库(主c源文件里要进行函数声明)

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/82217298

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。