续前文,讲一讲老环境下的软件编译的一些坑,这次是grep2.1x。
其实编译grep2.1x最好还是在mingGW下编译,但是懒得去整理了,就在Msys2下吧。
Msys2维持稳定的更新,但是旧的环境就丢失了。在某个网站上找到了它为了维护自己的软件留下的Msys2的旧版本20160205版本(msys2-base-i686-20160205.tar.xz),以及不完整的mingw32 toolchain,这个版本最大的问题,是没有msys2的toolchain,以至于造成了很多困难。
以后的系列文章都以这个版本为基础。
首先,里面没有grep。grep是Unix下强大的GNU文本搜索工具,由于编译脚本都要用到它,几乎是编译GNU软件的必备工具。
在mirrors.kernel.org/gnu/里可以找到各种GNU软件的各个版本,下载grep2.16进行编译。
$ ./configure --build=i586-w64-mingw32 CC="gcc"
可以看到很多找不到grep的提示,如
checking whether fgets_unlocked is declared... ./configure: line 2527: grep: command not found
但是能通过,然后在make时出错:
Makefile:1561: .deps/xstriconv.Po: No such file or directory
Makefile:1562: .deps/xstrtoimax.Po: No such file or directory
Makefile:1563: .deps/xstrtol-error.Po: No such file or directory
......
即一堆.deps/*.po找不到。Stackoverflow上回答是automake的bug,可以删掉"AUTOMAKE_OPTIONS = subdir-objects" in the Makefile.am.
或使用如下命令:
autoreconf -if
./configure
来解决。这是胡说。只要把automake和alocal换成1.12版本就OK了。
make
OK。make install还是有错误,不能安装到目录。无所谓了,拷贝.exe到usr/bin就行。