静态库和动态库

文章介绍了库的概念,强调其在编程中的重要性,特别是复用率高的函数。接着详细阐述了静态库和动态库的区别:静态库在链接时会被整合到可执行文件中,而动态库只在运行时链接,有利于节省资源和程序更新。动态库的创建和使用过程也进行了说明。
摘要由CSDN通过智能技术生成

一、库

        库就是把一些复用率高的函数的目标文件打包在一起,提供相应的接口,便于程序员使用。它是一种加密的二进制文件。

        现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。

        像我们中常用的输出printf函数。当我们在使用时并不关心其底层是如何实现,只是使用其来提高编写代码的效率。它需要被操作系统载入内存运行,与其他可执行程序相比,它不能直接运行。

        在linux系统中库有两种,静态库和动态库。

二、静态库

       1.在链接阶段,将汇编生成的目标文件.O与引用到的库一起链接打包到可执行文件,这个过程对应的连接方式就是静态链接。

        2.链接方法

        设有.c文件text.c。首先将text.c 编译成二进制文件gcc -c text.c -o text.o。然后使用ar将其制作成静态库ar -crs libtext.a text.o。

        注意用ar制作静态库时命名的静态库要以lib开头,扩展名为.a。

        3.使用方法

        以上面的text.c为例,main.c函数要用它生成的静态库在编译时用gcc main.c -L./ -ltext。然后使用./a.out运行即可。

        -L:指定静态库的位置。

        -l:指定静态库的名字不包括lib部分。

三、动态库

        1.制作

        以text.c为例。

        使用命令gcc -fPIC -c text.c -o text.o生成二进制文件

                        gcc -shard -o libtext.so text.o制作成动态库

        注意动态库名以lib开头,扩展名为.so 

        2.使用

        若以main.c 函数引用动态库,执行gcc main.c -L./ -ltext,然后执行./a.out运行会报错,此时需要将动态库拷贝到/user/lib/下。如sudo cp libtext.so /user/lib/。此时再执行./a.out。

四、总结

        静态库可直接以./a.out运行,运行后不需要库,但是每个a.out都要包含库,体积大,浪费资源,给程序更新,部署,发布带来麻烦。

        动态库在编译时不含链接到可执行文件中,只是保留一个索引,在运行时才真正链接一个动态库,它的体积小,节约资源,有利于程序的更新,部署,发布。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值