【问题标题】:MinGW/msys, linker (ld.exe) not finding libpng (-lpng) even though it's installed, running xpdf configure scriptMinGW/msys,链接器(ld.exe)即使已安装也找不到 libpng(-lpng),正在运行 xpdf 配置脚本
【发布时间】:2017-02-05 15:44:56
【问题描述】:

我从它们包含的用于 MinGW/msys 的 makefile 的源代码中安装了 libpng 的 1.2、1.4 和 1.6 版本。它似乎有效 - 我在各个地方都有头文件:

  • /包括
  • /include/libpng
  • /include/libpng12
  • /include/libpng14
  • /本地/包括
  • /local/include/libpng
  • /local/include/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 调用配置脚本,无论我提供什么包含目录和库的组合,它都会在同一个地方阻塞。 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

我已经尝试了上面列出的包含目录和库的所有组合,每次都是一样的。会是

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 片段。但在这里,我完全不知所措。

【问题讨论】:

    标签: c++ windows gcc mingw libpng


    【解决方案1】:

    试试这个:

    1. 将 MinGW redist 添加到路径中。
    2. 确保 MinGW 库和包含路径在 Cygwin 之前。 (MinGW 目标的 png.h 标头与 Cygwin 目标的 png.h 标头不兼容。)
    3. 动态链接 libpng。 (Cygwin 中的 mingw64-*-libpng 包不提供静态的 libpng.a 库,这很不寻常。)

    例如,对于 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 环境的重要非显而易见的步骤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2019-10-27
      • 2012-02-26
      相关资源
      最近更新 更多