解决编译中遇到的问题:Please port gnulib freadahead.c to your platform

今天在编译旧版的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."

解决编译中遇到的问题:Please port gnulib freadahead.c to your platform_第1张图片

在网上搜了一下解决方法,然后尝试解决,现记录如下。

进入对应文件夹(也就是需要编译的项目的目录),在命令行窗口输入:

sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c
echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h

如下图所示,

问题解决,继续正常编译。

解决编译中遇到的问题:Please port gnulib freadahead.c to your platform_第2张图片

然后我尝试编译了一下更老版本的gzip-1.3.9。不出意外地,遇到了另外一个错误:

解决编译中遇到的问题:Please port gnulib freadahead.c to your platform_第3张图片

在网上查的一个解决方案(参见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的更新日志中,这个函数几经更名。

解决编译中遇到的问题:Please port gnulib freadahead.c to your platform_第4张图片

于是,我们在gzip-1.3.9的文件下面做同样的事,使用命令 grep -r futimens ./* 定位所有出现该函数的地方,然后统一把名字换成fdutimens。

问题成功解决,编译可以顺利完成。

【参考资料】

1. 链接1

2. 链接2

你可能感兴趣的:(linux,GNU,gzip,编译)