共享库从文件结构上来讲,与共享对象没什么区别。Linux下,共享库就是普通的ELF共享对象。

1、共享库命名:

  libname.so.x.y.z :其中最前面使用前缀lib,中间是库的名字和后缀“so”。最后三个数字组成的是版本号。其中,“x”表示主版本号,“y”表示次版本号,"z"表示发布版本号。

2、SO-NAME:

  共享库主版本号与次版本号决定了一个共享库的接口。对于Linux系统来说,普遍采用一种叫做SO-NAME的命名机制来记录共享库依赖关系。每个共享库都有一个对应的"SO-NAME"。这个SO-NAME即为共享库的文件名去掉次版本号和发行版本号,保留主版本号。比如一个共享库为libfoo.so.2.6.1,那么它的SO-NAME为libfoo.so.2。在linux系统中,系统会为每个共享库在它所在目录创建一个跟SO-NAME相同的并且指向它的软链接。以SO-NAME创建的软链接会指向目录中主版本号相同、次版本号和发行版本号最新的共享库。

3、链接名

  当我们在编译使用共享库时,为了使用的简洁,比如链接一个libXXX.so.2.6.1共享库,只需要在编译相关命令中指定-lXXX即可。编译器会根据当前环境,在系统相关路径(往往由-L参数指定)查找最新版本"XXX"库。

  “XXX”又称为共享库链接名。不同类型的库可能会有同样的类型名。例如静态库libc.a与动态库libc.so.2.6.1。因而利用ld的-static参数时,“-lc”会查找到libc.a; 若使用-Bdynamic  “-lc”则会查找到libc.so.2.6.1。

4、共享库路径:

  一般一个系统中主要有3个存放共享库的路径。

a、/lib 这个位置主要存系统最关键和基础的共享库。比如动态链接器、c语言运行库等

b、/usr/lib 这个位置主要放一些非系统运行时所需关键库。

c、/usr/local/lib 这个目录位置放置一些与系统本身并不十分相关的库。

 

  

转载于:https://www.cnblogs.com/wsw-seu/p/10655707.html

binary hacks读数笔记(共享库)相关推荐

  1. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  2. 【读书笔记】【程序员的自我修养 -- 链接、装载与库(二)】进程虚拟地址空间、装载与动态链接、GOT、全局符号表、共享库的组织、DLL、C++与动态链接

    文章目录 前言 介绍 可执行文件的装载与进程 进程虚拟地址空间 装载方式 操作系统对可执行文件的装载 进程虚存空间分布 ELF文件的链接视图和执行视图 堆和栈 Linux 内核装载ELF & ...

  3. 程序员的自我修养--链接、装载与库笔记:Linux共享库的组织

    共享库(Shared Library)概念:其实从文件结构上来讲,共享库和共享对象没什么区别,Linux下的共享库就是普通的ELF共享对象.由于共享对象可以被各个程序之间共享,所以它也就成为了库的很好 ...

  4. linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库

    Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...

  5. LINUX之静态库共享库

    linux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows中的.obj文件 .so 为共享库,是shared object,用于动态连接的,和dll差不多 .a为 ...

  6. Android .so 共享库(动态链接库)

    转载自:http://blog.csdn.net/bat603/article/details/1438408 烟雨楼 http://hi.baidu.com/yanyulou c2]$ ar -r ...

  7. Linux 下编译安装软件,找不到共享库 xx.so 的解决办法

    编译memcached时,报错没有libevent,于是下载libevent,configure , make && make install ,然后在重新安装memcache成功之后 ...

  8. UNIX再学习 -- 静态库与共享库

    一.库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.由于Windows和linux本质不同,因此二者库的二进制是不兼容的.库有两种:静态库(.a..lib)和共享库也称动态库 ...

  9. Python数模笔记-PuLP库(1)线性规划入门

    1.什么是线性规划 线性规划(Linear programming),在线性等式或不等式约束条件下求解线性目标函数的极值问题,常用于解决资源分配.生产调度和混合问题.例如: max fx = 2*x1 ...

最新文章

  1. 稳压源GWINSTEKGPD3303系列控制软件
  2. oracle rman imp exp,Oracle-client支持exp|imp|rman
  3. maven 打包jar_Maven一定要会的这几个知识!
  4. 使用java修改图片DPI
  5. 解释java程序所使用的命令是,Java程序的执行原理以及解释说明
  6. Adopt Open JDK官方文档(八)OpenJDK 项目介绍
  7. java 预览word文档_Java版office文档在线预览
  8. 怎么使用openssl来生成一个自签名的x509证书?
  9. 七上八下猜数字_[转]适宜导游在旅游车载途中讲述的故事及互动游戏合集
  10. Scrapy爬取makepolo网站数据深入详解
  11. vue截取一个字符串_字符串截取方法
  12. python 008 __ 小斌文档 | 元组
  13. win10在BIOS开启Intel VT-x
  14. 学了皮毛,你如何能做Web安全工程师?
  15. zookeeper自问自答
  16. 计算机考研公共课考英语几,新文道教育:2022考研必须要了解的30个知识点
  17. HI3861学习笔记(14)——ADC接口使用
  18. 【Vue开发实战课后题】子组件为何不可以修改父组件传递的props?
  19. 搭建全球地图数据服务中心
  20. 【官方】BootCDN-稳定、快速、免费的前端开源项目 CDN 加速服务

热门文章

  1. c# 线程,同步,锁
  2. 吴恩达机器学习笔记7-数据绘制
  3. CAShapeLayer和CAGradientLayer
  4. 面试感悟-------一名3年工作经验的程序员应该具备的技能
  5. Android Socket编程
  6. 用OpenCV建立一幅只有几个像素且值可以自定义的图像,并输出保存到硬盘的方法
  7. gcc -ldl 选项作用
  8. leetcode算法题--出界的路径数★
  9. 用计算机计算线性卷积的基本规则,实验三_线性卷积与圆周卷积的计算.doc
  10. 【带着canvas去流浪(10)】文字烟花