1

我正在使用 Mingw-w64 为 Windows 交叉编译Fontconfig(主机是 Ubuntu 12.04 64 位)。该过程包括以下步骤:

  1. 编译并安装构建依赖项(Freetype 和 eXpat)。

  2. 运行./configure

    ./configure --host=i686-win64-mingw32 --prefix=/usr/i686-w64-mingw32
    
  3. ./configure过程完成没有错误,我运行make

    make
    
  4. 不幸的是,这里出了点问题:

    ...
      CCLD   libfontconfig.la
    i686-w64-mingw32-gcc: error: /usr/i686-w64-mingw32/lib/libexpat.lib:
        No such file or directory
    

如您所见,libtool正在寻找libexpat.lib一些奇怪的原因(存在)而不是libexpat.a确实存在)。

这里发生了什么?


编辑:为了让事情更混乱,这些相同的步骤在 Ubuntu 12.10 (Quantal) 上完美运行。我不知道为什么它在 12.04(精确)上失败了。上述命令的Adiff输出在包含上述错误的行之前没有任何区别。


进一步编辑:我提取了正在运行的生成错误的原始命令:

/bin/bash ../libtool --silent --tag=CC --mode=link i686-w64-mingw32-gcc -O2 -ve
rsion-info 7:2:6 -no-undefined -export-symbols fontconfig.def -o libfontconfig.l
a -rpath /usr/i686-w64-mingw32/lib fcatomic.lo fcblanks.lo fccache.lo fccfg.lo 
fccharset.lo fcdbg.lo fcdefault.lo fcdir.lo fcformat.lo fcfreetype.lo fcfs.lo fc
init.lo fclang.lo fclist.lo fcmatch.lo fcmatrix.lo fcname.lo fcpat.lo fcserializ
e.lo fcstat.lo fcstr.lo fcxml.lo ftglue.lo -L/usr/i686-w64-mingw32/lib -lfreetyp
e -L/usr/i686-w64-mingw32/lib -lexpat

调用i686-w64-mingw32-gcc变为:

--------------------------------------------------------------------------------
i686-w64-mingw32-gcc -shared .libs/libfontconfig-1.dll.def .libs/fcatomic.o .lib
s/fcblanks.o .libs/fccache.o .libs/fccfg.o .libs/fccharset.o .libs/fcdbg.o .libs
/fcdefault.o .libs/fcdir.o .libs/fcformat.o .libs/fcfreetype.o .libs/fcfs.o .lib
s/fcinit.o .libs/fclang.o .libs/fclist.o .libs/fcmatch.o .libs/fcmatrix.o .libs/
fcname.o .libs/fcpat.o .libs/fcserialize.o .libs/fcstat.o .libs/fcstr.o .libs/fc
xml.o .libs/ftglue.o -L/usr/i686-w64-mingw32/lib /usr/i686-w64-mingw32/lib/libfr
eetype.dll.a /usr/i686-w64-mingw32/lib/libexpat.lib -O2 -o .libs/libfontconfig-1
.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libfontco
nfig.dll.a
4

1 回答 1

1

所以事实证明,问题根本不在于 Fontconfig,而在于 eXpat。用于构建 eXpat 的环境没有安装 Mingw-w64 的 C++ 编译器,并且由于某种原因导致文件名为libexpat.a而不是libexpat.dll.a.

一旦我在安装了g++-mingw-w64安装 g++-mingw-w64包的情况下重试了构建,它就成功了。

顺便说一句,Quantal 构建成功而 Precise 构建失败的原因是因为g++-mingw-w64安装 g++-mingw-w64不是mingw-w64安装 mingw-w64对 Precise 的依赖,而是成为对 Quantal 的依赖。

于 2012-08-28T02:56:52.167 回答