linux 共享库版本管理

原理

请看Linux 如何解决共享库的版本控制

我的理解

  1. linux在系统内部将用到的共享库版本都保留下来,并没有覆盖。(不同soname)
  2. 调用程序和共享库在链接的时候已经记录下来了共享库的soname。
  3. libxx.so文件一般只是一个软链接。只是为了与gcc命令参数-lxx 中的xx名称一致。实际中可以在不同目录创建相同名字的libxx.so链接到不同soname的共享库。gcc -lxx使用-L参数指定不同目录位置,实现使用不同版本的共享库链接。在链接完成之后,libxx.so就失去了他的作用。因为加载共享库时直接查找soname。
  4. 实际中发现一个奇怪的现象:例如将soname为libxx.so.1的软链接拷贝到/usr/lib64 或/lib64文件夹下,其文件属性发生了变化:不再是软链接了,而是一个regular file。
  5. 基本就是这样。总算明白了linux里面libxx.so后面的那串或短或长的数字是干什么的了……
  6. 生成共享库时要注意添加参数指明其soname: -Wl,-soname=libxx.so.1 其中-Wl,后面的东东是链接时带上的参数K/V。
  7. 没了。

linux 共享库版本管理

时间: 2024-10-03 21:54:16

linux 共享库版本管理的相关文章

linux共享库

linux共享库 linux中共享库一般以.so.x.y.z 命名,其中x,y,z分别为主版本号.次版本号.发布版本号.同一个库,主版本号不同则相互不兼容:主版本相同,次版本号高的库比次版本号低的库有一些更新,增加了一些接口符号且保持原来的接口符号不变,但保持后向兼容:主版本号和次版本号相同,发布版本号不同,表示库的一些修改修正,不增加新功能. SO-NAME软链接 SO-NAME 软链接:共享库 libname.so.x.y.z 的SO-NAME软链接命名为 libname.so.x 即去掉次

Linux 共享库(动态库)

Linux 系统上有两类根本不同的 Linux 可执行程序.第一类是静态链接的可执行程序.静态可执行程序包含执行所需的所有函数 - 换句话说,它们是"完整的".因为这一原因,静态可执行程序不依赖任何外部库就可以运行. 第二类是动态链接的可执行程序. 静态可执行程序与动态可执行程序比较 我们可以用 ldd 命令来确定某一特定可执行程序是否为静态链接的: # ldd /sbin/sln not a dynamic executable "not a dynamic executa

linux环境 :Linux 共享库LIBRARY_PATH, LD_LIBRARY_PATH 与ld.so.conf

参考: 1. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径.(该路径在默认路径之前查找) 移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时可以将这些目录设置到LD_LIBRARY_PATH中. 当执行函数动态链接.so时,如果此文件不在缺省目录下‘/usr/local/lib’ and ‘/usr/lib’. 那么就需要指

Linux共享库路径配置

今天在某测试服务器上使用ab压力测试工具时,出现了错误 ab: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory 查询资料,发现原因是是找不到正确的共享库路径. 参考资料: Linux共享库路径配置 /etc/ld.so.conf文件 解决方法: 1.添加搜索路径,并使用ldconfig命令更新. 查看/etc/ld.so

windows动态链接库[DLL]与Linux共享库[SO]技术浅析

一.动态链接库的技术优点: 1)节省内存和磁盘空间:因为动态库在内存或磁盘中只需一份,便可供多个进程或程序使用. 2)模块化编程,方便协作:这一点静态库也能胜任. 3)使用动态加载DLL或SO时,便于模块升级,无需重新编译或链接整个程序. 二.windows的动态链接库: 1.windows的静态库生成的是.lib文件,其中包含了函数和数据实体,链接时合到程序中: 2.windows的动态库生成.dll文件并导出一个.lib文件,该.lib文件中的函数没有实体[不是一个 准确的说法],函数内部是

Linux共享库.so文件的命名和动态链接

Linux中的.so文件 是动态链接的产物 共享库理解为提供各种功能函数的集合,对外提供标准的接口 Linux中命名系统中共享库的规则 主版本号:不同的版本号之间不兼容 次版本号:增量升级 向后兼容 发行版本号:对应次版本的错误修正和性能提升,不影响兼容性 Linux中的共享库并不都是这样的格式 比如GLibc的共享库命名为:libc-x.y.z.so 动态链接器也是GLibc的一部分,使用ld-x.y.z.so命名 libm(数学库)等 SO-NAME机制 系统和程序中要链接的共享库的格式一般

Linux Linux共享库

so文件在linux中为共享库,与windows下的dll类似. so文件中的函数可供多个进程调用,最大可能的提供二进制代码复用. 共享库可以使代码的维护工作大大简化,当修正了一些错误或者添加了新特性的时候,用户只需要获得升级后的so并安装他就可以. 注意:即使不同的进程调用同一个so文件,通过共享库并不能实现不同进程间的通讯,因为同一个so被不同进程加载到不同的内存空间. so文件编译方法 --so文件的源文件中不需要main函数,即使有也不会被执行. --编译的时候gcc需要加-fPIC选项

Linux共享库两种加载方式简述

动态库技术通常能减少程序的大小,节省空间,提高效率,具有很高的灵活性,对于升级软件版本也更加容易.与静态库不同,动态库里面的函数不是执行程序本身 的一部分,而是在程序执行时按需载入,其执行代码可以同时在多个程序中共享.由于在编译过程中无法知道动态库函数的地址,所以需要在运行期间查找,这对程 序的性能会有影响. 共享库 对于共享库来讲,它只包括2个段:只读的代码段 和可修改的数据段.堆和栈段,只有进程才有.如果你在共享库的函数里,分配了一块内存,这段内存将被算在调用该函数的进程的堆中.代码段由于其

Linux共享库的组织 -- 学习笔记

8.1  共享库的版本 共享库的更新可以被分为两类: 兼容更新.所有的更新只是在原有的共享库基础上添加以内容,所有原有的接口都保持不变 不兼容更新,共享库更新改变了原有的接口,使用该共享库原有接口的程序可能不能运行或运行不正常 这里讨论的接口是二进制接口,ABI 导致C语言的共享库ABI改变的行为主要有4个: 1) 导出函数的行为发生改变 2) 导出函数被删除 3) 导出数据的结构发生变化 4) 导出函数的接口发生变化,如函数返回值.参数被改变 共享库版本命名: Linux有一套规则链命名系统中