网站首页 > 文章中心 > 其它

linux安装动态库命令

作者:小编 更新时间:2023-08-31 10:14:39 浏览量:140人看过

linux一个应用多个版本动态库命令

Linux 系统,也同样面临和Window一样的问题,如何控制动态库的多个版本问题.Window之前没有处理好,为此专门有个名词来形容这个问题 "Dll hell",其严重影响软件的升级和维护. Dll hell 是指windows 上动态库新版本覆盖旧版本,但是却不兼容老版本.常常发生在程序升级之后,动态库更新,原有程序运行不起来;或者装新软件,但是已有的软件运行不起来. 同样Linux操作系统,也有同样的问题,那么它是怎么解决的呢?

Linux 为解决这个问题,引入了一套机制,如果遵守这个机制来做,就可以避免这个问题. 但是这只事一个约定,不是强制的.但是建议遵守这个约定,否则同样也会出现 Linux 版的Dll hell 问题. 下面来介绍一个这个机制. 这个机制是通过文件名,来控制dll (shared library) 的版本.

Linux 上的Dll ,叫shared library,其有三个名字,分别有不同的目的.

第二个是动态库的soname( Short for shared object name),其是应用程序加载dll 时候,其寻找共享库用的文件名.其格式为

lib + math+.so + ( major version number)

其只包含major version number,换句话说,也就是只要其接口没有变,应用程序都可以用,不管你其后minor build version or build version.

linux安装动态库命令-图1

问题来了,程序运行时怎么通过soname 找个real name? Soname 存在哪里?如果与real name 关联起来?什么时候存的?

这就是此时此刻呢要介绍的第三个共享库的名字,link name,顾名思义,就是在编译过程,link 阶段用的文件名. 其将sonmae 和real name 关联起来.

第三个名字,共享库的连接名(link name),是专门为build 阶段连接而用的名字.这个名字就是lib + math +.so ,比如libmath.so.其是不带任何版本信息的.在共享库编译过程中,连接(link) 阶段,编译器将生成一个共享库及real name,同时将共享库的soname,写在共享库文件里的文件头里面.可以用命令 readelf -d sharelibrary 去查看.

Linux下的静态库和动态库

linux安装动态库命令-图2

静态库

静态库优缺点

上面简单介绍了静态库,那它自然也会有优缺点,这里来介绍下它的优缺点.

动态库

动态库优缺点

Linux查看某个库是否安装

查看某个库是否安装命令:

为了让动态链接库为系统所共享,还需运行动态链接库的管理命令 ldconfig .此执行程序存放在/sbin目录下.

ldconfig命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib .so ),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

ldconfig通常在系统启动时运行,而当用户安装了一个新的动态链接库时,就需要手工运行这个命令.

①.、往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf文件的,但是添加完后需要调用下ldconfig,不然添加的library会找不到.

参考:

①.、 linux中ldconfig命令 以及 添加动态库自动搜索路径

以上就是土嘎嘎小编为大家整理的linux安装动态库命令相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章