为什么libtool要查找.lib文件而不是.a文件?

时间:2012-08-27 20:06:48

标签: cross-compiling libtool expat-parser fontconfig

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

  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
    
  5. 正如您所看到的,libtool正在寻找libexpat.lib出于某种奇怪的原因(存在)而不是libexpat.a 存在)。

    这里发生了什么?


    编辑:让事情变得更加混乱,这些相同的步骤在Ubuntu 12.10(Quantal)上完美运行。我不知道为什么它在12.04失败(精确)。上述命令的diff输出在包含上述错误的行之前不会产生差异。


    进一步编辑:我已经解压缩了正在运行的生成错误的原始命令:

    /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
    

1 个答案:

答案 0 :(得分:1)

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

一旦我重新安装了g++-mingw-w64 Install g++-mingw-w64 http://hostmar.co/software-small软件包的构建,它就成功了。

顺便提一下,在Precise构建失败的同时Quantal构建成功的原因是g++-mingw-w64 Install g++-mingw-w64 http://hostmar.co/software-small不是mingw-w64 Install mingw-w64 http://hostmar.co/software-small对Precise的依赖,但已成为对Quantal的依赖。