当前位置: 首页 > news >正文

Linux下静态库与动态库使用总结

区别

  1. 使用静态库占用的磁盘空间相对比动态库要大。
    如果多个可执行程序使用库中同一个函数,那么链接静态库时同一个函数的代码会被复制多份,而链接动态库只复制一份。
  2. 动态库可共享且版本更新方便
    静态链接库在程序编译的时候就被加载进来,不能共享 ;动态链接库是在程序执行的时候加载,可共享。库函数版本升级时,直接替换动态库文件即可,不需要重新编译源程序;而如果更新了静态库,则可执行程序需要重新编译。
  3. 加载速度不一样
    静态库在链接时就和可执行文件在一起了,而动态库在加载或运行时才链接,所以使用静态库时加载相对更快。
  4. 程序运行时依赖动态库的存在。
    静态链接的可执行文件不需要依赖其他的内容即可运行,而动态链接的可执行文件必须依赖动态库的存在。在部署运行环境时,必需拷贝动态库到指定路径下,否则运行会报错。

注意事项

链接库的放置顺序

如下设置,可编译成功

$ gcc -c main.c
$ gcc -static -o main main.o -lm

但是,如下设置,编译报错:

$ gcc -c main.c
$ gcc -static -lm -o main main.o
main.o: In function 'main':
main.c:(.text+0x2f): undefined reference to 'exp'
collect2: error: ld returned 1 exit status

所以,需要把具有引用关系的库放置在后面。

参考:

https://zhuanlan.zhihu.com/p/71372182

http://www.lryc.cn/news/338589.html

相关文章:

  • 分布式任务调度:架构、原理与实践
  • ping命令返回无法访问目标主机和请求超时浅析
  • 地球上的七大洲介绍
  • IntelliJ IDEA 2024 for Mac/Win:引领Java开发新纪元的高效集成环境
  • Java 中命令模式,请用代码具体举例
  • 低延时+高并发+强事务丨DolphinDB 交易型内存存储引擎 IMOLTP 使用指南
  • 写代码的修养
  • springboot 问题整合
  • UNIAPP二维码展示页亮度调至最亮返回恢复进入前亮度
  • Golang ProtoBuf 初学者完整教程:安装
  • Isolation Forest 简介
  • Java爬虫携带sign签名
  • 设计者模式之中介者模式(下)
  • SAP SD学习笔记04 - 出荷Plant(交货工厂),出荷Point(装运点),输送计划,品目的可用性检查,一括纳入/分割纳入,仓库管理
  • bind包装器——C++新特性(三)
  • MXNet的下载安装及问题处理
  • Python 中的列表排序和排序规则
  • 面经整理1
  • ChatGPT个人专用版 SSRF漏洞复现(CVE-2024-27564)
  • Python中的可哈希与不可哈希对象详解
  • 【嵌入式DIY实例】-DIY速度计
  • 1.0 Hadoop 教程
  • 【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末附3个算法源码)
  • 智能水务系统:构建高效节水的城市水网
  • 【JavaEE初阶系列】——网络编程 UDP客户端/服务器 程序实现
  • 数据结构复习指导之绪论(算法的概念以及效率的度量)
  • C语言经典例题(23)
  • Gitea的简单介绍
  • Qt信号与槽
  • QQ农场-phpYeFarm添加数据教程