Windows 10 上的 LibPNG 构建问题
LibPNG building issue on Windows 10
我正在尝试在 Windows 10 上构建 libpng 以获得 win32 二进制文件,但我想有一个问题与 awk 解析具有 CRLF 行结尾的文件有关。我尝试使用 dos2unix 命令转换文件,但没有成功,结果相同 - 在 make 命令上我得到下一个输出:
sh-3.1$ make
rm -f pnglibconf.c pnglibconf.tf[45]
gawk -f ./scripts/options.awk out=pnglibconf.tf4 version=search\
./pngconf.h ./scripts/pnglibconf.dfa\
./pngusr.dfa 1>&2
gawk -f ./scripts/options.awk out=pnglibconf.tf5 pnglibconf.tf4 1>&2
options.awk: bad line (10): com
make: *** [pnglibconf.c] Error 1
编译器是 MinGW with MSYS v1.0 on WIndows 10 x86,libpng 版本是 1637。如何解决这个问题?
更新:通过下载 tar.gz 存档解决,但有新问题
sh-3.1$ make make all-am make[1]: Entering directory `/c/Users/user/Downloads/libpng-1.6.37.tar/libpng-1.6.37' depbase=`echo contrib/tools/pngfix.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ gcc -DHAVE_CONFIG_H -I. -g -O2 -MT contrib/tools/pngfix.o -MD -MP -MF $depbase.Tpo -c -o contrib/tools/pngfix.o contrib/tools/pngfix.c &&\ mv -f $depbase.Tpo $depbase.Po In file included from contrib/tools/../../png.h:330,
from contrib/tools/pngfix.c:44:
contrib/tools/../../pnglibconf.h:206:54: error: expected identifier or '(' before '-' token
#define PNG_TEXT_Z_DEFAULT_STRATEGY 0
^
In file included from contrib/tools/../../png.h:335,
from contrib/tools/pngfix.c:44:
contrib/tools/../../pngconf.h:524:9: error: unknown type name 'ptrdiff_t'
typedef ptrdiff_t png_ptrdiff_t;
^~~~~~~~~
make[1]: *** [contrib/tools/pngfix.o] Error 1 make[1]: Leaving directory `/c/Users/user/Downloads/libpng-1.6.37.tar/libpng-1.6.37' make: *** [all] Error 2
经实验验证Linux上不会出现此问题。
已解决。总结:使用tar.gz 或xz archive with unix LF,并编辑编译时生成的pnglibconf.h 所以没有换行符。
我的解决方案是将 scripts/pnglibconf.dfa 上的换行符从 CRLF 更改为 LF。
我正在尝试在 Windows 10 上构建 libpng 以获得 win32 二进制文件,但我想有一个问题与 awk 解析具有 CRLF 行结尾的文件有关。我尝试使用 dos2unix 命令转换文件,但没有成功,结果相同 - 在 make 命令上我得到下一个输出:
sh-3.1$ make
rm -f pnglibconf.c pnglibconf.tf[45]
gawk -f ./scripts/options.awk out=pnglibconf.tf4 version=search\
./pngconf.h ./scripts/pnglibconf.dfa\
./pngusr.dfa 1>&2
gawk -f ./scripts/options.awk out=pnglibconf.tf5 pnglibconf.tf4 1>&2
options.awk: bad line (10): com
make: *** [pnglibconf.c] Error 1
编译器是 MinGW with MSYS v1.0 on WIndows 10 x86,libpng 版本是 1637。如何解决这个问题?
更新:通过下载 tar.gz 存档解决,但有新问题
sh-3.1$ make make all-am make[1]: Entering directory `/c/Users/user/Downloads/libpng-1.6.37.tar/libpng-1.6.37' depbase=`echo contrib/tools/pngfix.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\ gcc -DHAVE_CONFIG_H -I. -g -O2 -MT contrib/tools/pngfix.o -MD -MP -MF $depbase.Tpo -c -o contrib/tools/pngfix.o contrib/tools/pngfix.c &&\ mv -f $depbase.Tpo $depbase.Po In file included from contrib/tools/../../png.h:330,
from contrib/tools/pngfix.c:44:
contrib/tools/../../pnglibconf.h:206:54: error: expected identifier or '(' before '-' token
#define PNG_TEXT_Z_DEFAULT_STRATEGY 0
^
In file included from contrib/tools/../../png.h:335,
from contrib/tools/pngfix.c:44:
contrib/tools/../../pngconf.h:524:9: error: unknown type name 'ptrdiff_t'
typedef ptrdiff_t png_ptrdiff_t;
^~~~~~~~~
make[1]: *** [contrib/tools/pngfix.o] Error 1 make[1]: Leaving directory `/c/Users/user/Downloads/libpng-1.6.37.tar/libpng-1.6.37' make: *** [all] Error 2
经实验验证Linux上不会出现此问题。
已解决。总结:使用tar.gz 或xz archive with unix LF,并编辑编译时生成的pnglibconf.h 所以没有换行符。
我的解决方案是将 scripts/pnglibconf.dfa 上的换行符从 CRLF 更改为 LF。