我曾尝试使用 CC 5.10 在 Cray x86_64 系统上编译 libpng 1.5.14,但经常遇到丢失的 endif 错误。我通过在文件末尾添加#endif 修复了许多这些错误,允许“make check”继续通过第一个系列的 3 个测试。但是,dfn.c 中有 1 个我无法修复的 endif 错误。我试图通过将 dfn.c 复制到 hack_dfn.c,在 hack_dfn.c 的末尾添加 #endif 语句,然后在重新创建 dfn.c 之后让 Makefile 将 hack_dfn.c 复制到 dfn.c 来破解它,但没有成功编译过程。以下是未对 dfn.c 文件进行任何修复的最后输出,包括我收到的错误:
Running tests. For details see pngtest-log.txt
Running test-pngtest.sh
PASS: pngtest --strict pngtest.png
PASS: test-pngtest.sh
Running test-pngvalid-simple.sh
PASS: pngvalid --standard
PASS: pngvalid --standard --progressive-read
PASS: pngvalid --standard --interlace
PASS: pngvalid --standard --progressive-read --interlace
PASS: pngvalid --size
PASS: pngvalid --size --progressive-read
PASS: pngvalid --transform
PASS: test-pngvalid-simple.sh
Running test-pngvalid-full.sh
PASS: pngvalid --gamma-threshold
PASS: pngvalid --gamma-transform
PASS: pngvalid --gamma-sbit
PASS: pngvalid --gamma-16-to-8
PASS: pngvalid --gamma-background
PASS: pngvalid --gamma-alpha-mode
PASS: pngvalid --gamma-transform --expand16
PASS: pngvalid --gamma-background --expand16
PASS: pngvalid --gamma-alpha-mode --expand16
PASS: test-pngvalid-full.sh
==================
All 3 tests passed
==================
make[1]: Leaving directory `/usr/local/libpng-1.5.14'
rm -f scripts/symbols.out dfn.c dfn?.out
test -d scripts || mkdir scripts
echo '#include "scripts/symbols.dfn"' >dfn.c
cc -E -DHAVE_CONFIG_H -I. -DPNG_CONFIGURE_LIBPNG\
-DPNGLIB_LIBNAME='PNG15_0' -DPNGLIB_VERSION='1.5.14' -DSYMBOL_PREFIX='' -DPNG_NO_USE_READ_MACROS -DPNG_BUILDING_SYMBOL_TABLE dfn.c > dfn1.out
PGC-S-0218-Missing #endif (dfn.c: 2)
PGC/x86-64 Linux 12.4-0: compilation completed with severe errors
make: *** [scripts/symbols.out] Error 2
我没有时间检查 3282 个 if[n]def 语句,检查每个语句是否已关闭。我希望这里有比我自己更了解 libpng 的人至少可以帮助我找到可以开始寻找的地方。奇怪的是,我能够在另一个使用 gcc 的系统上编译相同版本的 libpng 而没有问题。我希望避免在这个系统上使用 gcc。