今天在编译旧版的gzip-1.7时遇到了一个错误:
error: #error "Please port gnulib freadahead.c to your platform! Look at the definition of fflush, fread, ungetc on your system, then report this to bug-gnulib."
在网上搜了一下解决方法,然后尝试解决,现记录如下。
进入对应文件夹(也就是需要编译的项目的目录),在命令行窗口输入:
sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h
如下图所示,
问题解决,继续正常编译。
然后我尝试编译了一下更老版本的gzip-1.3.9。不出意外地,遇到了另外一个错误:
在网上查的一个解决方案(参见2):
gzip (1.3.12-2ubuntu1) gutsy; urgency=low
* Globally rename futimens to gz_futimens, so it doesn't clash with
the new glibc-2.6 symbol of the same name, causing build failures.
然后我在较新版的gzip-1.7(也就是本文开篇刚刚编译过的项目)的路径下尝试搜索关键词futimens。如下图所示,可见在过往gzip的更新日志中,这个函数几经更名。
于是,我们在gzip-1.3.9的文件下面做同样的事,使用命令 grep -r futimens ./* 定位所有出现该函数的地方,然后统一把名字换成fdutimens。
问题成功解决,编译可以顺利完成。
【参考资料】
1. 链接1
2. 链接2