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

动静态库的学习

动静态库中,不需要包含main函数

文件分为内存级(被打开的)文件和磁盘级文件

每个程序都要依赖很多基础的底层库,本质上来说库是一种可执行代码的二进制形式,可以被载入内存执行

静态库 linux  .a       windows  .lib

动态库 linux  .so     windows  .dll

静态库

静态库在链接时直接是把库的实现拷贝到可执行文件里,一旦形成可执行程序,可执行程序不在再依赖静态库

静态库的生成

libxxx.a

静态库的使用

-L:指定库路径

-I:指定头文件搜索路径

-l:指定库名

库文件名称:去掉 lib 前缀和 .a 后缀

检测一个可执行文件依赖的库

静态库在链接时直接是把库的实现拷贝到可执行文件里,一旦形成可执行程序,可执行程序不在再依赖静态库。动态库需要在加载程序的同时找到所依赖的库

动态库

动态库的生成

fPIC:产生位置无关码

libxxx.so

动态库形成可执行文件和静态库一样

但是可执行文件不能执行

系统并不等于gcc

解决方法

拷贝.so文件到系统共享库路径下

 系统会在lib64/ 或者/usr/local/ 路径下寻找动态库

向系统共享库路径下建立同名软连接

更改环境变量

OS运行程序,要查找动态库,也会在该环境变量下查找动态库(LD_LIBRARY_PATH)

把我们要找的动态库文件的路径复制下来,拷贝至配置文件

结论

1. 动静态库同时存在gcc/g++默认使用动态库

非要使用静态库,只能带 -static,一旦-static,就必须存在对应的静态库

只存在静态库,可执行文件,对于该库,只能静态链接了

2. 在linux系统下,默认情况安装的大部分库,默认都优先安装的是动态库

3. 库:应用程序 = 1:n

4. vs不仅仅形成可执行程序,也能形成动静态库

这些二进制文件都是FLF格式的


http://www.kler.cn/a/533656.html

相关文章:

  • 牛客周赛 Round 79
  • kubernetes 核心技术-集群安全机制 RBAC
  • ros 发布Topic
  • 【高级篇 / IPv6】(7.2) ❀ 05. 在60E上配置ADSL拨号宽带上网(IPv6) ❀ FortiGate 防火墙
  • 排序算法--归并排序
  • 巧妙利用数据结构优化部门查询
  • golang命令大全11--命令的常见问题与解决方案
  • pandas获取指定日期的行
  • 网络爬虫会对服务器造成哪些影响?
  • 每日Attention学习19——Convolutional Multi-Focal Attention
  • Java学习进阶路线
  • 标准库发送数据深入理解USART
  • Windows下安装mkcert
  • 9. k8s二进制集群之kube-controller-manager部署
  • TensorFlow深度学习实战(6)——回归分析详解
  • Deepseek技术浅析(四):专家选择与推理机制
  • AI开发模式:ideal或vscode + 插件continue+DeepSeek R1
  • 0205算法:最长连续序列、三数之和、排序链表
  • 2024年12月 Scratch 图形化(四级)真题解析 中国电子学会全国青少年软件编程等级考试
  • 工作总结:上线篇
  • 你也在这里
  • MYSQL简单查询
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter3-语言基础
  • 力扣-哈希表-1 两数之和
  • Baklib如何实现内容管理平台的智能化升级与数据整合
  • Docker深度解析:安装各大环境