png 1.6.25 的 plotutils 编译错误:取消引用指向不完整类型的指针
plotutils compilation error with png 1.6.25: dereferencing pointer to incomplete type
在我的 RedHat 7 Linux 机器上 (gcc 4.8.3),我安装了 png-dev (1.6.25)。
尝试构建 plotutils-2.6(我检查过它最后更新是 2009 年)。
./配置成功。 make 步骤出现错误:
gcc -DHAVE_CONFIG_H -I. -I.. -I./../include -DLIBPLOT -O2 -MT z_write.lo -MD -MP -MF .deps/z_write.Tpo -c z_write.c -fPIC -DPIC -o .libs/z_write.o
In file included from /usr/local/include/pngconf.h:50:0,
from /usr/local/include/png.h:371,
from z_write.c:43:
z_write.c: In function '_pl_z_maybe_output_image':
z_write.c:167:22: error: dereferencing pointer to incomplete type
if (setjmp (png_ptr->jmpbuf))
^
z_write.c: In function '_our_error_fn_stdio':
z_write.c:447:19: error: dereferencing pointer to incomplete type
longjmp (png_ptr->jmpbuf, 1);
^
问题 1:plotutils 库是否仍在积极维护?如果没有,是否有 C++ 程序员的替代方案?
你们中有人遇到过这个问题并解决了吗?
我找到了问题的根源。答案提供于:http://www.libpng.org/pub/png/src/libpng-1.2.x-to-1.4.x-summary.txt。
引自link
d. Direct access to png_ptr->jmpbuf has been deprecated since libpng
version 1.0.6, and libpng now generates a warning about it.
To avoid such warnings, change
setjmp(png_ptr->jmpbuf)
to
setjmp(png_jmpbuf(png_ptr))
plotutils库中的libplot/z_write.c文件需要更新:
第 167 行:
/*if (setjmp (png_ptr->jmpbuf)) */
if (setjmp (png_jmpbuf(png_ptr)))
第 448 行:
/*longjmp (png_ptr->jmpbuf, 1); Kemin changed this*/
longjmp(png_jmpbuf(png_ptr), 1);
这两个修复让编译器很满意。如果您希望 plotutils 在不进行代码编辑的情况下使用 png 1.2 或更早版本,您可以使用基于 png 库版本的条件编译。问题仍然存在,是否积极维护 plotutils?
在我的 RedHat 7 Linux 机器上 (gcc 4.8.3),我安装了 png-dev (1.6.25)。
尝试构建 plotutils-2.6(我检查过它最后更新是 2009 年)。
./配置成功。 make 步骤出现错误:
gcc -DHAVE_CONFIG_H -I. -I.. -I./../include -DLIBPLOT -O2 -MT z_write.lo -MD -MP -MF .deps/z_write.Tpo -c z_write.c -fPIC -DPIC -o .libs/z_write.o
In file included from /usr/local/include/pngconf.h:50:0,
from /usr/local/include/png.h:371,
from z_write.c:43:
z_write.c: In function '_pl_z_maybe_output_image':
z_write.c:167:22: error: dereferencing pointer to incomplete type
if (setjmp (png_ptr->jmpbuf))
^
z_write.c: In function '_our_error_fn_stdio':
z_write.c:447:19: error: dereferencing pointer to incomplete type
longjmp (png_ptr->jmpbuf, 1);
^
问题 1:plotutils 库是否仍在积极维护?如果没有,是否有 C++ 程序员的替代方案?
你们中有人遇到过这个问题并解决了吗?
我找到了问题的根源。答案提供于:http://www.libpng.org/pub/png/src/libpng-1.2.x-to-1.4.x-summary.txt。
引自link
d. Direct access to png_ptr->jmpbuf has been deprecated since libpng
version 1.0.6, and libpng now generates a warning about it.
To avoid such warnings, change
setjmp(png_ptr->jmpbuf)
to
setjmp(png_jmpbuf(png_ptr))
plotutils库中的libplot/z_write.c文件需要更新:
第 167 行:
/*if (setjmp (png_ptr->jmpbuf)) */
if (setjmp (png_jmpbuf(png_ptr)))
第 448 行:
/*longjmp (png_ptr->jmpbuf, 1); Kemin changed this*/
longjmp(png_jmpbuf(png_ptr), 1);
这两个修复让编译器很满意。如果您希望 plotutils 在不进行代码编辑的情况下使用 png 1.2 或更早版本,您可以使用基于 png 库版本的条件编译。问题仍然存在,是否积极维护 plotutils?