注册 登录
爱吱声 返回首页

伯威的个人空间 http://aswetalk.net/bbs/?4655 [收藏] [复制] [分享] [RSS]

日志

源代码多平台支持引发的不兼容性

热度 20已有 470 次阅读2023-4-11 15:40

这几天在折腾某IP包,其中带了几个小命令行工具,因为它们是Windows/Linux多平台支持,所以没提供可执行文件,只给了C源码和Makefile。
俺在CentOS下一跑make, error: 源码里自带的getline函数和stdio.h库里的同名函数冲突。这年头还有人自带getline? 于是俺简单粗暴地把getline换名为getline0. 继续make, 这回的error奇奇怪怪,大概是:
“request for member ‘xxx’ in something not a structure or union”。
俺搜了一会儿,有人说是zlib的版本不兼容导致。当前版本是1.2.7, 俺就找了台1.2.3 zlib的CentOS机器,make通过。现在有点担心这个可执行文件在1.2.7 zlib的平台上能不能工作,因为它是动态连接到libz.so的。拷过来运行,一切正常。
看来不兼容性只体现在源码层次?还是挺奇怪的。
折腾了半天,值得写个日志了。

后续:俺又花了点时间Google,基本上知道为啥了。zlib不同版本引发的兼容性问题还挺著名的,基本上是因为某些开发者错把gzFile当句柄来用了,而其实它是一个指针。不同版本的gzFile指针定义方式有些差异,新版的会在编译时直接引发错误。旧版的编译则不报错,用户可以将错就错糊弄过去。所以俺只要编译过了,新版旧版的.so都能用。如果用户一开始就把gzFile当指针用,那么不论新旧版zlib都没有问题。   
gzFile ~= FILE * ;
5

膜拜

鸡蛋
9

鲜花
2

路过

雷人

开心
2

感动

难过

刚表态过的朋友 (18 人)

发表评论 评论 (12 个评论)

回复 nanimarcus 2023-4-11 16:13
做成静态链接了事,不要去考虑彻底解决问题,解决不了。
回复 伯威 2023-4-11 16:25
俺又花了点时间Google,基本上知道为啥了。zlib不同版本引发的兼容性问题还挺著名的,基本上是因为某些开发者错把gzFile当句柄来用了,而其实它是一个指针。不同版本的gzFile指针定义方式有些差异,新版的会在编译时直接引发错误。旧版的编译则不报错,用户可以将错就错糊弄过去。所以俺只要编译过了,新版旧版的.so都能用。如果用户一开始就把gzFile当指针用,那么不论新旧版zlib都没有问题。   
gzFile ~= FILE * ;
回复 伯威 2023-4-11 16:26
nanimarcus: 做成静态链接了事,不要去考虑彻底解决问题,解决不了。
是的。用静态链接或者建一个本地版本的动态链接都可以解决问题。
回复 阿忙 2023-4-11 23:12
句柄是个啥?英文是什么?
回复 阿忙 2023-4-11 23:13
对于外来的包,如果需要改源代码才能用我一律放弃,养不起,维护太花时间
回复 数值分析 2023-4-11 23:46
阿忙: 句柄是个啥?英文是什么?
HANDLE,具体地说,这里应该是指file descriptor(FD)。就是一个整数。驴兄C语音不熟练啊
回复 伯威 2023-4-11 23:48
阿忙: 句柄是个啥?英文是什么?
File Handle,文件句柄。其实就叫FILE struct更准确。
回复 伯威 2023-4-11 23:51
阿忙: 对于外来的包,如果需要改源代码才能用我一律放弃,养不起,维护太花时间
就是些小工具,相当于IP包的附件,最好当然是拿来就能用了。
回复 阿忙 2023-4-12 00:12
伯威: File Handle,文件句柄。其实就叫FILE struct更准确。
谢了,这个翻译真不错
回复 阿忙 2023-4-12 00:13
数值分析: HANDLE,具体地说,这里应该是指file descriptor(FD)。就是一个整数。驴兄C语音不熟练啊
我的所有编程语言完全是英文的,和中文术语基本对不上
回复 数值分析 2023-4-12 03:14
伯威: File Handle,文件句柄。其实就叫FILE struct更准确。
欸,这我可就要挑理了,file structrue可不是句柄,只有这个结构里面的一个字段:int _fileno存储的才是FD,才是句柄。这个可得搞清楚。
回复 伯威 2023-4-12 10:30
数值分析: 欸,这我可就要挑理了,file structrue可不是句柄,只有这个结构里面的一个字段:int _fileno存储的才是FD,才是句柄。这个可得搞清楚。 ...
你说的对,俺已经注意到自己混淆了。 俺其实在讨论的是FILE struct,而不是file handle.

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

手机版|小黑屋|Archiver|网站错误报告|爱吱声   

GMT+8, 2024-12-22 19:47 , Processed in 0.033010 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部