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

linux下把动态库变成静态库

1.用nm命令获取动态库中的所有符号列表,假如动态库的文件为lib.so

nm -gD lib.so > lib.txt  将把符号列表输出到名为lib.txt的文本文件中

2.创建个新的静态库文件,使用ar命令可以创建一个空的静态库文件

ar -rcs lib.a

3.将动态库中的每个符号提取到静态库中,用objcopy命令将动态库中的每个符号提取到静态库中,

while read line; dosymbol=$(echo $line | awk '{print $3}')objcopy --redefine-sym $symbol=libdynamic.so libstatic.a
done < symbol_list.txt
这个我不会用

objcopy --redefine-syms=symbol_list.txt libdynamic.so libstatic.a

 4.完成后,你将得到一个名为libstatic.a的静态库文件,其中包含了从动态库中提取的所有符号。

请注意,这种方法只能将动态库中的符号转换为静态库中的符号,而无法将动态链接库中的代码转换为静态库中的代码。如果需要将动态库的代码静态链接到应用程序中,还需要重新编译该代码并将其与应用程序一起静态链接。

  1. 存储方式:静态库的代码和符号被编译进可执行文件中,而动态库的代码和符号则是在运行时从共享库文件中加载到进程空间中。

  2. 可重定位性:静态库的符号和代码可以被多次复用,因为它们被编译为可重定位目标文件,在链接时被静态地链接到可执行文件中。而动态库的符号和代码只有在运行时才会被加载,因此不能被多次复用。

  3. 大小:静态库包含完整的代码和数据,所以它的大小通常比动态库大。动态库只包含代码和数据的一部分,因此它的大小通常比静态库小。

  4. 运行时行为:静态库在编译时将其代码和数据链接到可执行文件中,因此它在运行时的行为与可执行文件完全一致。而动态库的行为则取决于其加载和链接时的环境,例如其版本、位置和加载顺序等。

将动态库中的符号转换为静态库中的符号,意味着将动态库中的函数和变量等符号提取出来作为静态库中的一部分。这样,在链接可执行程序时,编译器可以直接将静态库中的符号链接到可执行程序中,而不需要使用动态链接库。

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

相关文章:

  • 基于STM32单片机设计的智能水温控制系统
  • PIL——图像读取、裁剪、保存操作
  • Windows 下 QT开发环境的搭建:
  • 深度学习中Numpy的一些注意点(多维数组;数据类型转换、数组扁平化、np.where()、np.argmax()、图像拼接、生成同shape的图片)
  • (2023版)斯坦福CS231n学习笔记:DL与CV教程 (56) | 卷积神经网络
  • 表单验证 ---- 在Vue2中使用ElementUI进行表单验证
  • HarmonyOS 转场动画 ForEach控制
  • 2024--Django平台开发-订单项目管理(十四)
  • Docker 安装 CentOS
  • 方案解决:5G基站节能及数字化管理
  • JavaScript深浅拷贝的几种方式
  • VBA窗体跟随活动单元格【简易版】(2/2)
  • 个性化定制的知识付费小程序,为用户提供个性化的知识服务
  • 【轮式平衡机器人】——软硬件配置/准备
  • 中国联通助力吴江元荡生态岸线打造5G+自动驾驶生态长廊
  • 小白准备蓝桥杯之旅(c/c++b组)
  • Flutter GetX 之 国际化
  • 349. 两个数组的交集(力扣)(OJ题)
  • 安全帽识别-赋能深圳自贸中心智慧工地
  • 代码之外:工程师的成长进阶秘籍
  • openssl3.2 - 官方demo学习 - smime - smsign2.c
  • 6.C++对象模型
  • AbstractHttpMessageConverter + easyexcell优雅下载附件
  • 虚拟线程探索与实践
  • openssl3.2 - 官方demo学习 - mac - poly1305.c
  • 【Python 千题 —— 基础篇】不吉利的数字
  • 3d模型未响应打不开怎么办---模大狮模型网
  • Java-NIO 开篇(1)
  • VSCode 插件推荐
  • 摄像部分时序