免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6604 | 回复: 11

请教:用dlopen打开so文件是否可以忽略版本号或副版本号? [复制链接]

论坛徽章:
0
发表于 2011-12-09 17:26 |显示全部楼层
发现很多so版本号和副版本号都有区别,导致换个系统就无法工作,如:
openssl 的libcrypto.so
在ubuntu   libcrypto.so.1.0.0
在fedaro   libcrypto.so.1.0.0e
在centos  libcrypto.so.0.0.9

dlopen 有没有参数或技巧可以 忽略版本号或副版本号?

抑或需要自己实现?

请知道的同学介绍一下。。

非常感谢!

论坛徽章:
0
发表于 2011-12-09 17:36 |显示全部楼层
直接封装一层或做软链接。

论坛徽章:
0
发表于 2011-12-09 17:41 |显示全部楼层
直接封装一层或做软链接。
seer671 发表于 2011-12-09 17:36



软链接需要用户操作的,我只想在自己的程序中完成。

封装一层是指自己写代码实现吧?

DLOPEN没有这个功能吗?我记得有文章说加载SO库的时候是自动忽略副版本号的。。。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2011-12-09 18:13 |显示全部楼层
回复 1# activeport


    主版本号不能忽略,那个不同的话表示接口(interface)不兼容。你找个动态链接的程序用 ldd 看看,其实系统在加载动态库的时候只考虑主版本号的,你自己通过 dlopen 加载也应该这么做。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2011-12-09 18:17 |显示全部楼层
回复 3# activeport


    Linux 的动态库版本规则:

  1. libname.so.X.Y.Z                            (实际的库文件)
  2. libname.so.X  -> libname.so.X.Y.Z (加载时用的名字)
  3. libname.so -> libname.so.X             (链接时用的名字)
复制代码
对于一个正确安装的动态库,上述三个名字都应该存在。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2011-12-09 18:28 |显示全部楼层
回复 5# MMMIX


    下述链接中的 The Libtool library versioning scheme 一节有介绍:
http://www.freesoftwaremagazine. ... nce_using_autotools

论坛徽章:
0
发表于 2011-12-09 19:10 |显示全部楼层
soname相同就可以了,小版本号差一点没关系

论坛徽章:
0
发表于 2011-12-09 21:47 |显示全部楼层
回复  activeport


    主版本号不能忽略,那个不同的话表示接口(interface)不兼容。你找个动态链接的 ...
MMMIX 发表于 2011-12-09 18:13



   
谢谢大家

TO:MMMIX

我测试了我用DLOPEN("libcrypto.1",...)并不能打开libcrypto.1.0.0

是不是我需要自己编程实现忽略副版本号才行?
DLOPEN并不提供忽略版本或副版本号的功能?

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2011-12-10 13:03 |显示全部楼层
本帖最后由 MMMIX 于 2011-12-10 13:07 编辑
我测试了我用DLOPEN("libcrypto.1",...)并不能打开libcrypto.1.0.0

是不是我需要自己编程实现忽略副版本号才行?
DLOPEN并不提供忽略版本或副版本号的功能
activeport 发表于 2011-12-09 21:47



    你還是沒明白。libname.so.X 這種名字應該是個軟鏈接,你 dlopen 的時候只需要使用這個名字即可,根本不需要關心它到底鏈到了哪個文件,也就是說,如果你想用 libcrypto.so.1.0.0,你應該 dlopen libcrypto.so.1,而不是直接 dlopen libcrypto.so.1.0.0。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
发表于 2011-12-10 13:11 |显示全部楼层
是不是我需要自己编程实现忽略副版本号才行?
DLOPEN并不提供忽略版本或副版本号的功能?
activeport 发表于 2011-12-09 21:47



    你說的這個功能 dlopen 是沒有的,因為根本不需要。想明白為什麼,就看看我上面提供的那個鏈接中的介紹。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP