На моем компьютере с Linux RedHat 7 (gcc 4.8.3) у меня установлен png-dev (1.6.25).
Попытка построить plotutils-2.6 (я проверил, что это было последнее обновление 2009).
./configure успешно. Проблема при выполнении шага с ошибкой:
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))
Файл libplot / z_write.c в библиотеке plotutils необходимо обновить:
в строке 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. Остается вопрос, активно ли ведутся сюжеты?
Других решений пока нет …