Linux中的.so文件 是动态链接的产物

共享库理解为提供各种功能函数的集合,对外提供标准的接口

Linux中命名系统中共享库的规则

主版本号:不同的版本号之间不兼容

次版本号:增量升级 向后兼容

发行版本号:对应次版本的错误修正和性能提升,不影响兼容性

Linux中的共享库并不都是这样的格式

比如GLibc的共享库命名为:libc-x.y.z.so

动态链接器也是GLibc的一部分,使用ld-x.y.z.so命名

libm(数学库)等

SO-NAME机制

系统和程序中要链接的共享库的格式一般为:libname.so.x

一般是一个纸箱系统中主版本号相同、次版本号最高的同名共享库,目的是保证在兼容的前提下使用最新的版本

在可执行文件(Linux中为ELF文件)的相关字段中保存的就是SO-NAME

当共享库升级的时候,有一下两种情况:

1)主版本号不变,说明共享库只是做了增量升级(保证原来的所有都不改变,在此基础上添加新的接口),并不影响原先的程序运行的正确性

此时,原来的版本不需要存在,所有用新的共享文件库文件替换现有的老版本(次版本号比较低的)文件,然后运行ldconfig[后文会讲]就可以了

2)主版本号改变,此时升级的时候需要保留原来的老版本的共享库(为了兼容原来以来此版本共享库的可执行程序),同时需要保存新的版本的共享库

Linux中的ldconfig

当系统中安装或者更新一个共享库的时候需要更新软链接和动态链接器查找文件

所以应该及时运行ldconfig

ldconfig的作用就是遍历所有的保存共享库的目录/lib /usr/lib等,根据实际的共享库的版本更新软链接

在GCC编译的时使用共享库的形式比较简单,并不需要拼写SO-NAME等

gcc -o hello hello.c -lNAME

利用上面的形式便可以链接到 libNAME.so.x.y.z(系统中的版本)

动态链接器按照下列顺序依次装载或者查找共享对象

1)由环境变量 LD_LIBRARY_PATH指定的路径

2)由路径缓存文件/etc/ld.so.cache指定的路径

3)默认共享目录 先/usr/lib 再/lib

其中LD_LIBRARY_PATH是一个环境变量,当指定某个程序的LD_LIBRARY_PATH时

动态链接器在查找共享库的时候,会首先从指定的路径开始查找

linux 动态库系统目录,Linux共享库.so文件的命名和动态链接相关推荐

  1. linux 动态库系统目录,Linux操作系统:指定动态库(.so)搜索路径(4)

    表1: 程序pos输出结果和动态库的对应关系 创建各个动态库,并放置在相应的目录中.测试环境就准备好了.执行程序pos,并在该命令行中设置环境变量LD_LIBRARY_PATH. # LD_LIBRA ...

  2. Linux下开源库的使用(共享库文件头文件配置全局搜索)(WSL)

    关键词 g++; vscode; c++; pkg-config; include; lib; linux; .pc; tasks.json; launch.json; WSL 前言 需求及手动解决方 ...

  3. linux ubuntu dlopen,linux – 使用dlopen()加载共享库时出错

    我正在开发一个程序,在CentOS上使用dlopen加载用户创建的插件.我遇到了一个插件的问题,该插件依赖于也具有依赖关系的共享库: libplugin.so – > libservices.s ...

  4. linux g++ 链接,Linux G++将64位共享库代码链接到静态库

    如果对象模块将在共享库中使用,则始终需要"位置独立代码".它高度依赖于平台,并且会产生一些开销. 您必须在amd64而不是x386上显式指定它的原因只是它恰好是x86的默认值,而不 ...

  5. linux如何进入解释器路径,如何更改解释器路径并将命令行参数传递给Linux上的可执行共享库?...

    以下是"可执行"共享库的最小示例(假定文件名:)mini.c: // Interpreter path is different on some systems //+defini ...

  6. 动态库.so(共享库)的制作和使用

    动态库的制作 1.首先建立三个C文件以及相应的头文件 2. 现将.c文件编译成.o文件 gcc -fpic -c test1.c test2.c 3.将第2步编译的.o文件生成动态库 gcc -sha ...

  7. Linux动态加载共享库,Linux共享库的动态加载(附测试案例)

    共享库的动态加载是指可以在程序运行的过程中去加载所需的共享库.常用于某些系统或者应用程序的自动升级. 在C语言的源程序动态加载共享库,需要调用一组特殊的函数,它们被声明于一个专门的头文件dlfcn.h ...

  8. Linux平台gcc和动态共享库的基础知识

    http://www.javaeye.com/topic/261176 对大多数不从事Linux平台C语言开发的人来说,GNU gcc的一套工具和Linux平台的共享库的使用还是十分陌生的,其实我也不 ...

  9. Linux C++ libdl.so dlfcn.h使用方法(dlopen()、dlsym()、dlclose()、dlerror())(用于动态链接库操作)(懒加载、立即加载)共享库符号、动态库

    文章目录 dlfcn.h解析 - dlopen():打开一个动态链接库文件并返回一个句柄,该句柄用于后续的操作,如查找符号.关闭库等. - dlsym():在打开的动态链接库中查找指定的符号,并返回符 ...

最新文章

  1. php加密手机版_PHP解密支付宝小程序的加密数据、手机号的示例代码
  2. Layout of the output array img is incompatible with cv::Mat (step[ndims-1] !
  3. 推荐!计算机视觉最适合入门的 8 本教程,算法与实战兼备
  4. tinyxml c语言,开源TinyXML 最简单的新手教程
  5. 手把手教你crontab排障
  6. Activiti保存.png 流程图片文件且解决idea中保存图片时显示中文乱码的解决方法
  7. 你真的懂病毒式营销吗
  8. java根据富文本生成pdf文件
  9. torch中permute()函数用法
  10. mysql随机抽样方法_MySQL中随机抽样
  11. Palabos User Guide中文解读 | 第十四章 | 网格加密Refinement
  12. 企业工资管理系统论文
  13. linux find查找时间段文件,查找某个时间段的文件和find命令
  14. 通过poi导出带图片的Excel表格
  15. Windows高效文件搜索工具/Everything/Listary/uTools
  16. [MapReduce] Counter
  17. python怎么复数乘方开方_一篇小文入门 Python
  18. matlab containers,matlab中的containers.Map()
  19. Linux硬盘分区mbr还是gpt,涨姿势:MBR和GPT硬盘分区表的那些事儿
  20. 区块链的大问题有救了!

热门文章

  1. 软件测试之-------软件缺陷
  2. 对于python的感受_聊聊我对python的感受
  3. gnome没有命令行_命令行提示,喜欢GNOME的8个理由,自动Raspberry Pi备份等
  4. (2)MyBatis简介
  5. VSCode自定义代码片段8——声明函数
  6. bootstrap-table使用 带条件查询翻页及数据更新的问题。
  7. 值不值 | 三分钟搞定jpa?值不值!
  8. Bootstrap 如何使用字体图标
  9. linux java services_在Linux上将Java应用程序作为服务运行
  10. roboware实用功能