Plotutils的PNG 1.6.25编译错误:指向不完整类型的指针解引用
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年)。./configure successuful。make step出错:
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。
引用链接
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库版本的条件编译。问题是,这些情节是否得到了积极的维护?
相关文章:
- 非类型指针和引用模板参数,以及在编译时如何/为什么解析它们.c++
- 如何访问在 c++ 中在类内声明的结构类型指针变量?
- (C )找到基本类型指针的儿童类型
- 表达式必须具有指向对象的指针类型(指针向量)
- 将子项复制构造到父类型指针中
- C 返回类型指针声明
- 调用虚拟函数而不通过类类型指针创建任何对象
- C++ 如何使用类类型指针制作向量
- 为什么基类型指针不能获取派生类对象的地址值?
- 如何在 C++ 中获取映射类型指针,映射
- 如何检查该类型的类型指针是正确对齐的
- 正在转换为短类型指针
- 指向任意类方法的模板非类型指针
- 如何通过强制转换类型指针将字符数组转换为uint16_t
- 指向shared_ptr的不透明类型 C 指针
- C++:从值类型指针强制转换为包含迭代器
- C/C++:访问给定类型指针的位置与访问另一类型指针的相同位置不同
- 比较类型指针
- 数据类型指针使用*(Datatype *)
- 如何打印c++中char类型指针的所有值