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

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

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

3

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



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/

3
¿No sería un enlace simbólico mucho más suave que una copia?
CousinCocaine
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.