Error de compilación de GLib (ffi.h), pero libffi está instalado

119

Después de una configuración exitosa, realice salidas con snipped

gclosure.c:29:17: fatal error: ffi.h: No such file or directory
compilation terminated.

Tengo libffi instalado y ubico ffi.h da:

/home/luca/gcc4.6/gcc-4.6.0/libffi/include/ffi.h.in
/usr/include/x86_64-linux-gnu/ffi.h
/usr/share/doc/ghc-doc/html/users_guide/ffi.html
/usr/share/doc/libffi5/html/Using-libffi.html
deltaluca
fuente
1
Debería comprobar config.log para ver qué dice sobre ffi. Tal vez no lo encuentre, pero el script tiene errores y no sale con un error. Posiblemente esté confundido por el nuevo directorio de inclusión multilib. También verifique si el modificador -I apropiado se pasa al compilador.
Jester

Respuestas:

270

Si tiene un sistema operativo Linux basado en Debian con apt-get:

sudo apt-get install libffi-dev

Con un sistema operativo basado en Redhat:

yum install libffi-devel

Con Alpine Linux:

apk add libffi-dev
Eric Milliot-Martínez
fuente
6
Alternativamente, si está utilizando un sistema operativo basado en Redhat, use yum install libffi-devel
Yonatan
4
Tenga en cuenta que si está compilando glib en un sistema de 64 bits para 32 bits, debe instalar libffi-dev:i386. No fue obvio para mí. :)
Björn Lindqvist
6

Al compilar libffi 3.0.9 desde el código fuente, include/Makefile.ininstala las inclusiones en ${PREFIX}/lib/libffi-3.0.9/include directory. Estoy seguro de que hay una razón MARAVILLOSA para eso, pero me molesta.

Esta línea lo corrige, al compilar libffi:

/bin/perl -pe 's#^includesdir = .*#includesdir = \@includedir\@#' -i include/Makefile.in

Las inclusiones ahora se instalarán en ${PREFIX}/include, que es /usr/local/includepara mí.

Mi receta completa es:

cd /var/tmp
rm -rf libffi-3.0.9
untgz /usr/local/src/utils/libffi-3.0.9.tar.gz
cd libffi-3.0.9
/bin/perl -pe 's#^AM_CFLAGS = .*#AM_CFLAGS = -g#' -i Makefile.in
/bin/perl -pe 's#^includesdir = .*#includesdir = \@includedir\@#' -i include/Makefile.in
./configure --prefix=/usr/local \
    --includedir=/usr/local/include
gmake
gmake install
Mark Solaris
fuente
3

Se resuelve configurando manualmente LIBFFI_CFLAGS para la ubicación de ffi.h en configure

deltaluca
fuente
2

Compruebe su versión de GCC y anote esta entrada en el archivo de errores de Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

Fue la solución final para mi problema en particular (se veía exactamente como lo que informa, pero no se pudo resolver con la solución anterior) ... mi problema no tenía nada que ver con LIBFFI.

Mindwarpstudios
fuente
1

Un hilo viejo, pero de todos modos ...

Después de colocar los archivos requeridos en una ubicación donde se pudieran encontrar, lo hice funcionar:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/
Hammar
fuente
3
¿No sería un enlace simbólico mucho más suave que una copia?
CousinCocaine