简单介绍静态库动态库

发布文章 博文管理我的博客退出 Trash Temp c++继承 const的 static----数据 动态和静态库 动态库和静态库 静态库和动态库的简单 引用 运算符重载简单 # 静态库和动态库

通常习惯把公用的函数制成函数库

函数库分为静态库动态库

  • 静态库(.a):程序在编译连接的时候把库的代码链接到到可执行文件中。程序运行的时候不在需要静态库
  • 动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享库的代码。动态库是一个运行时库,需要在程序运行的时候也加载到内存中,并且加载的过程是操作系统干的,回去指定位置加载动态库,要去指定位置才可以运行程序
    ###动态链接和静态链接

静态链接就是在编译链接时直接将需要的执行代码拷贝到调用处,优点就是在程序发布的时候就不需要的依赖库,也就是不再需要带着库一块发布,程序可以独立执行,但是体积可能会相对大一些。

动态链接就是在编译的时候不直接拷贝可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库可执行代码,最终达到运行时连接的目的。优点是多个程序可以共享同一段代码,而不需要在磁盘上存储多个拷贝,缺点是由于是运行时加载,可能会影响程序的前期执行性能
库里面不能存在主函数,因为库封装好后被程序拿来用的,如果里面在有一个主函数,则会出现问题。
** 静态库的生成**

  1. 将所有的.o文件打包到一起(即程序在gcc生成.o文件后,就可以调用命令生成库)
    生成静态库: ar -cr lib***.a .o
    -c 创建
    -r 模块替换
    在这里插入图片描述
  2. 查看静态库:objdump -S lib***.a

###动态库的生成

  1. 在编译时(gcc时)加上选项 -fPIC(考虑为什么要加)
  2. 生成动态库:
    编译指令: gcc -fPIC -c test.c -o test.o
    生成动态库指令:gcc --shared -o libtest.so test.o
    在这里插入图片描述
  3. –share是生成动态库的gcc链接选项,没有这个将认为是生成可执行文件
  4. 查看动态库:objdump -S lib***.so

链接动态库(或静态库)----即使用库

  1. 生成一个动态库
    在这里插入图片描述
  2. 链接动态库
    指令:gcc main -L -l库名
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

选项:
-l后跟库名
-L ,指定库的路径

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值