前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >静态库和动态库

静态库和动态库

作者头像
谢晓曦
发布2021-08-09 13:30:58
1.5K0
发布2021-08-09 13:30:58
举报
文章被收录于专栏:程序猿秘籍程序猿秘籍

[x]静态库 .a : 从静态库中拷贝 对应的函数定义,即使对应机器上没有这个 库,也能运行;

静态库链接一般要放在最后面。

[x]动态库 .so : 运行时,动态加载的, 编译器只 “拷贝”一些重定位和符号表信息 , 若对应机器上没有这个库,则无法运

相关指令

代码语言:javascript
复制
 [2021-07-24 14:50:19][PID:8229] [|- gcc ] 
------------------------------------------------------------------------------------------------------
 [2021-07-24 14:50:19][PID:8229] [gcc 目标文件三种形式] 
 [2021-07-24 14:50:19][PID:8229] [可执行目标文件。即我们通常所认识的,可直接运行的二进制文件] 
 [2021-07-24 14:50:19][PID:8229] [可重定位目标文件。包含了二进制的代码和数据,可以与其他可重定位目标文件合并,并创建一个可执行目标文件] 
 [2021-07-24 14:50:19][PID:8229] [共享目标文件。它是一种在加载或者运行时进行链接的特殊可重定位目标文件] 
======================================================================================================
 [2021-07-24 14:50:19][PID:8229] [|- locate ] 
 locate  libm.so 

 readelf -h /lib/x86_64-linux-gnu/libm.so.6 共享目标文件 
 [2021-07-24 14:50:19][PID:8229] [静态链接] 
 gcc -static -o main main.o -lm 

 [2021-07-24 14:50:19][PID:8229] [动态链接 (默认)] 
 gcc -o main main.c -lm #默认使用的是动态链接 


 gcc -c main.c #生成可重定位目标文件(readelf -h main.o ) 
 gcc -o main main.o -lm (链接 libm.a or libm.so, 一定要放最后面,先提取未知的符号,再在库中 查找 符号定义) 
 readelf -h main (查看ELF 文件的头) 

 [2021-07-24 14:50:19][PID:8229] [|- ldd ] 
 ldd main (查看链接了哪些库) 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相关指令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档