MinGW / msys,链接器(ld.exe)即使安装了libpng(-lpng)也没找到,运行xpdf configure脚本

时间:2016-09-27 21:07:34

标签: c++ windows gcc mingw libpng

我从他们为MinGW / msys包含的makefile中安装了来自libpng的1.2,1.4和1.6版本。它似乎工作 - 我已经在各个地方获得了头文件:

  • /包括
  • /包含/ libpng的
  • /包含/填实:libpng12
  • /包含/ libpng14
  • /本地/包括
  • /本地/包含/ libpng的
  • /本地/包含/ libpng16

以及库文件:

  • /lib/libpng.a
  • /lib/libpng.dll.a
  • /lib/libpng12.a
  • /lib/libpng12.dll.a
  • /lib/libpng14.a
  • /lib/libpng14.dll.a
  • /local/lib/libpng.a
  • /local/lib/libpng.dll
  • /local/lib/libpng16.a
  • /local/lib/libpng16.dll

我用msys的bash调用configure脚本,无论include目录和库的组合是什么,它都会在同一个地方窒息。 Config.log给了我以下内容:

configure:7732: checking png.h usability  
configure:7732: gcc -c -g -O2  -I/local/include  conftest.c >&5  
configure:7732: $? = 0  
configure:7732: result: yes  
configure:7732: checking png.h presence  
configure:7732: gcc -E  -I/local/include  conftest.c  
configure:7732: $? = 0  
configure:7732: result: yes  
configure:7732: checking for png.h  
configure:7732: result: yes  
configure:7761: checking for png_write_row in -lpng  
configure:7786: gcc -o conftest.exe -g -O2   conftest.c -lpng -I/local/include  /local/lib/libpng.a -lz  >&5  
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lpng  
collect2.exe: error: ld returned 1 exit status

我已尝试过上面列出的include目录和库的每个组合,并且每次都是相同的。它将是

configure:7786: gcc -o conftest.exe -g -O2   conftest.c -lpng -I/include/libpng  /lib/libpng.dll.a -lz  >&5  
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lpng

configure:7786: gcc -o conftest.exe -g -O2   conftest.c -lpng -I/local/include/libpng16  /local/lib/libpng16.dll -lz  >&5  
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lpng

configure:7786: gcc -o conftest.exe -g -O2   conftest.c -lpng -I/include/libpng12  /lib/libpng12.a -lz  >&5  
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: cannot find -lpng

你得到了照片。我已经成功编译了其他几个不需要libpng的xpdf片段。但在这里,我完全失去了。

1 个答案:

答案 0 :(得分:0)

试试这个:

  1. 将MinGW redist添加到路径中。
  2. 确保MinGW库和包含路径位于Cygwin的路径之前。 (MinGW目标的png.h标头与Cygwin目标的png.h标头不兼容。)
  3. 动态链接libpng。 (Cygwin中的mingw64-*-libpng包不提供静态libpng.a库,这是不常见的。)
  4. 例如,对于64位版本:

    $ export CC=x86_64-w64-mingw32-gcc
    $ export CXX=x86_64-w64-mingw32-g++
    $ export PATH="/usr/x86_64-w64-mingw32/sys-root/mingw/bin:$PATH"
    $ export CFLAGS="-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib -I/usr/x86_64-w64-mingw32/sys-root/mingw/include -lpng -Wl,Bdynamic"
    $ export CXXFLAGS="$CFLAGS"
    $ which libpng-config
    /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libpng-config
    $ ./configure
    

    编辑:在编译时将redist文件夹添加到PATH,其中包含libpng.dll文件,是适用于Cygwin和MSYS环境的重要非显而易见的步骤。