【C语言】使用库和手动导入c源文件的区别
【摘要】
之前编写一类功能,封装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静态库和动态库的创建过程
-
静态库
-
在链接时,复制代码段。运行时无需加载。故运行速度快;但是占用空间大。
-
-
gcc -c hello.c -Wall 正常编译库
-
ar crs libhello.a hello.o 创建静态库
-
gcc -o test test.c -L. -lhello 编译时引用静态库(主c源文件里要进行函数声明)
-
-
动态库
-
不占用库中代码段的大小,且可以多个进程共享一个库;运行时需要动态加载。好处是,更新方便。
-
-
gcc -c -fPIC hello.c bye.c -Wall 编译库时要使用 -fPIC <程序无关 参数>
-
gcc -shared -o libcommon.so.1 hello.o bye.o 创建动态库
-
ln -s libcommon.so.1 libcommon.so 添加软链接
-
gcc -o test test.c -L. -lcommon 编译时引用动态库(主c源文件里要进行函数声明)
文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/feit2417/article/details/82217298
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)