linux:静态库和动态库

静态库:在编译过程中将所有函数载入,体积大

静态库的产生:

  1. 由源文件编译生成一堆.o,每个.o里都包含这个编译单元的符号表
  2. ar命令将很多.o转换成.a,成为静态库,一般命名为libxxxx.a,其中xxxx是该lib的名称

编写静态库(举例):

  1. 需要头文件hello.h,源程序hello.c,主程序main.c,此处为了方便,都放在同一文件夹testit中
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 通过以下命令生成hello.o文件
    在这里插入图片	描述
  3. 创建静态库文件libmyfile.a
    在这里插入图片描述
  4. 连接静态库文件生成目标程序
    在这里插入图片描述
    PS:
    -static :表示程序的静态链接
    -lmyfile:链接静态库myfile
    -L. :链接时需指明静态库所存在的路径,‘.’表示当前路径

动态库:在可执行程序运行时才载入,体积小

动态库的生成:

  • 动态库的后缀是.so,它由gcc加特定参数编译产生,命名一般为libxxxx.so.major.minor,xxxx是该lib的名称,major是主版本号, minor是副版本号

编写动态库(举例):

  1. 头文件hello.h,源程序hello.c,主程序main.c与静态库相同
  2. 生成hello.o文件的操作与静态库一样
  3. 通过以下操作生成动态库libmyfile.so在这里插入图片描述
  4. 通过以下操作生成可执行文件hello:在这里插入图片描述
  5. 但直接执行文件会出错,因为找不到libmyfile.so这个库,系统默认在系统的库文件夹里面搜索。懒得去改动系统文件 (其实是没找到),所以我们在每次运行程序的时候都执行一段语句指定动态库路径。下面给出运行错误和指定路径运行的情况:在这里插入图片描述
    可以看到,程序执行时找不到动态库
    在这里插入图片描述
    现在成功了,这里的LD-LIBRARY-PATH后面的".“是相对路径,可以用”…"表示上一级文件夹,诸如此类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值