免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hqyus
打印 上一主题 下一主题

XSLoder.pm报错,求助! [复制链接]

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
1 [报告]
发表于 2013-11-01 11:36 |显示全部楼层
回复 3# hqyus


    一个带C扩展的 Perl 模块通常都是由一个或多个 pm 文件加 .so 组成,use 这个模块时 pm 文件负责加载对应的扩展,这个过程会检测二者的版本号是否一致。所以这个版本号 pm 文件中有,.so 文件中也有,通过它来确认下是否加载了正确的版本

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
2 [报告]
发表于 2013-11-04 08:56 |显示全部楼层
回复 5# hqyus


    你这里是 pm 文件和 .so 文件版本不一致导致的,可以打开 $DynaLoader::dl_debug 标志来看下到底加载的哪个来找原因。然后把旧的删除掉再重新安装才OK

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2013-11-04 10:32 |显示全部楼层
回复 7# 104359176


    共享库中实现核心部分,pm 文件提供接口,共享库中的实现再怎么变 pm 文件中只要正确的粘和就行了,所以要求这两个一一对应不过分吧。绝大多数带C扩展的模块都是只用 C 实现 Perl 实在做不了的那部分,再在 pm 文件中包装下提供一个 perlish 的接口。

    楼主这情况应该是把模块的 pm 文件拷贝到 @INC 的一个目录中就以为安装完了,结果系统在对应的目录查找不到 .so 就用了@INC 后面目录中的,版本对不上是自然的。用 cpan 安装模块是不会出这问题的,我也没遇到过

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
4 [报告]
发表于 2013-11-04 11:43 |显示全部楼层
回复 9# 104359176


    大的版本升级用C写的模块需要重新编译安装,因为虽然 API 没变化但基础的数据结构都可能变化,有的API可能改写成了宏之类的。但是由于API的兼容需要的也仅仅是重新编译而已,Python Ruby 也是这样吧

    用 libffi 之类的工具可以部分解决这个问题,但是因为 Perl 的 API 全是宏想调用 Perl 的功能就几乎不可能了,ruby python 还有救
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP