在编译 expat 2.0.1 的时候,执行到 make install 发现有一个错误,大致上是在安装 xmlwf/xmlwf 的时候,提示文件名错误。
事实上是因为在 MinGW 下编译出的可执行文件都是带有扩展名 .exe 的,但是在执行 make install 的时候并没有加上这个扩展名,导致文件错误,事实上,这个文件已经复制好了。
错误只是导致下面的 man 目录内容没有办法复制,不影响使用。
这个问题大概是因为 expat 所自带的 libtool 工具的问题,可以参考:
[expat-Bugs-1211302] building 2005-01-28 with mingw/msys
libtool with expat, xmlwf/xmlwf target problems again
这两个网页描述了类似的问题。
我尝试在 Linux 下编译 expat 是没有问题的。
我也试着用新版的 libtool 去代替自带的相应文件,不过没有成功。
我是在 Glade/Gtk+ for Windows 下载的编译好的工具包,但是这里面编译的 xgettext 不能处理 glade 文件,会提示:
Language "glade" is not supported. ... relies on expat.This version was built without expat.
或者不支持"glade"。... 依赖 expat。此版本创建时未包含 expat。
gettext 是软件国际化用的,这里缺少的 expat 是一个 XML 解析库,因为 glade 本质就是一个 XML 文件。
既然现成的不行,就需要下载源码重新编译。下面所需要的所有包都是很好下载的,就不写地址了。
要编译我们需要的 gettext,需要先编译两个:libiconv 和 expat。这两个可以找编译好的,也可以自己编译下。在 MinGW 下编译 expat 可能还有些不重要的问题,以后再说。
都准备好以后(当然需要先配置好 MinGW ),将 gettext-0.17.tar.gz (可能版本不同)解压,然后在 MSYS 中进入相应目录输入:
./configure --prefix=/c/dist/gettext/ --with-libiconv-prefix=/c/extra-libs/libiconv --with-libexpat-prefix=/c/extra-libs/expat --enable-threads=win32
make
make install
依次执行并且经过漫长的配置编译(我是在30分钟以上),就生成了我们需要的文件。至于选项的含义,可以通过:
./configure --help
查看。其中 --enable-threads=win32 这个选项是听别人说要加上的,有关多线程的。

