Beschreibe den Fehler
Ich kann libvips nicht kompilieren, wenn ich libde265-dev libheif-dev-Bibliotheken installiere
Fortpflanzen
Schritte zum Reproduzieren des Verhaltens:
Erwartetes Verhalten
es kompilieren
Tatsächliches Verhalten
es scheitert
make[3]: Entering directory '/vips-8.10.1/libvips/foreign'
depbase=`echo heifload.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
/bin/bash ../../libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I../.. -I../../libvips/include -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libpng16 -I/usr/include/libexif -g -O2 -MT heifload.lo -MD -MP -MF $depbase.Tpo -c -o heifload.lo heifload.c &&\
mv -f $depbase.Tpo $depbase.Plo
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../.. -I../../libvips/include -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libpng16 -I/usr/include/libexif -g -O2 -MT heifload.lo -MD -MP -MF .deps/heifload.Tpo -c heifload.c -fPIC -DPIC -o .libs/heifload.o
heifload.c: In function 'vips_foreign_load_heif_build':
heifload.c:224:11: warning: implicit declaration of function 'heif_context_read_from_reader'; did you mean 'heif_context_read_from_memory'? [-Wimplicit-function-declaration]
error = heif_context_read_from_reader( heif->ctx,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
heif_context_read_from_memory
heifload.c:224:9: error: incompatible types when assigning to type 'struct heif_error' from type 'int'
error = heif_context_read_from_reader( heif->ctx,
^
heifload.c: At top level:
heifload.c:952:1: error: return type is an incomplete type
vips_foreign_load_heif_wait_for_file_size( gint64 target_size, void *userdata )
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
heifload.c: In function 'vips_foreign_load_heif_wait_for_file_size':
heifload.c:956:31: error: storage size of 'status' isn't known
enum heif_reader_grow_status status;
^~~~~~
heifload.c:962:12: error: 'heif_reader_grow_status_size_reached' undeclared (first use in this function); did you mean 'heif_reader_grow_status'?
status = heif_reader_grow_status_size_reached;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
heif_reader_grow_status
heifload.c:962:12: note: each undeclared identifier is reported only once for each function it appears in
heifload.c:970:12: error: 'heif_reader_grow_status_size_beyond_eof' undeclared (first use in this function); did you mean 'heif_reader_grow_status_size_reached'?
status = heif_reader_grow_status_size_beyond_eof;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
heif_reader_grow_status_size_reached
heifload.c:972:8: warning: 'return' with a value, in function returning void
return( status );
^
heifload.c:952:1: note: declared here
vips_foreign_load_heif_wait_for_file_size( gint64 target_size, void *userdata )
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ../../libvips/include/vips/vips.h:130:0,
from heifload.c:67:
heifload.c: In function 'vips_foreign_load_heif_init':
heifload.c:981:38: error: invalid application of 'sizeof' to incomplete type 'struct heif_reader'
heif->reader = VIPS_ARRAY( NULL, 1, struct heif_reader );
^
../../libvips/include/vips/memory.h:65:56: note: in definition of macro 'VIPS_ARRAY'
((T *) vips_malloc( VIPS_OBJECT( OBJ ), (N) * sizeof( T )))
^
heifload.c:985:14: error: dereferencing pointer to incomplete type 'struct heif_reader'
heif->reader->reader_api_version = 1;
^~
Makefile:695: recipe for target 'heifload.lo' failed
make[3]: Leaving directory '/vips-8.10.1/libvips/foreign'
make[3]: *** [heifload.lo] Error 1
Makefile:875: recipe for target 'all-recursive' failed
make[2]: Leaving directory '/vips-8.10.1/libvips'
make[2]: *** [all-recursive] Error 1
Makefile:629: recipe for target 'all-recursive' failed
make[1]: Leaving directory '/vips-8.10.1'
make[1]: *** [all-recursive] Error 1
Makefile:536: recipe for target 'all' failed
make: *** [all] Error 2
The command '/bin/sh -c wget https://github.com/libvips/libvips/releases/download/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.gz && tar -xf vips-${VIPS_VERSION}.tar.gz && cd vips-${VIPS_VERSION} && ./configure && make && make install && ldconfig' returned a non-zero code: 2
Umgebung
Docker / Ubuntu 18
Hier ein Teil meiner Docker-Datei
RUN apt-get -qq update && apt-get -qqy install vim zlib1g-dev libreadline-dev \
libncurses5-dev libpcre3-dev libssl-dev gcc perl make curl git-core curl \
luarocks libsass-dev glib2.0-dev libexpat1-dev \
libjpeg-dev libwebp-dev libpng-dev libexif-dev libgif-dev \
libde265-dev libheif-dev
ARG VIPS_VERSION=8.10.1
RUN wget https://github.com/libvips/libvips/releases/download/v${VIPS_VERSION}/vips-${VIPS_VERSION}.tar.gz \
&& tar -xf vips-${VIPS_VERSION}.tar.gz \
&& cd vips-${VIPS_VERSION} \
&& ./configure \
&& make && make install && ldconfig
Ubuntu 18.04 bietet libheif v1.1.0, aber heif_context_read_from_reader
wurde in libheif v1.3.0 hinzugefügt.
@jcupitt Vielleicht sollten wir libheif v1.3.0 (Juni 2018) zur minimal erforderlichen Version machen? Seit v1.1.0 gab es so viele Fehler- und vor allem Sicherheitskorrekturen für libheif.
Das klingt nach einer guten Idee @lovell. Erhöhen wir das Minimum für 8.10.2.
@solisoft du musst libheif selbst bauen, sorry. Aber wie Lovell sagt, sollten Sie die in Ubuntu18.04 wahrscheinlich sowieso nicht verwenden, also ist es vielleicht eine gute Sache.
OK, diese Änderung wird in 8.10.2 sein. Vielen Dank für den Bericht @solisoft !