Errore di compilazione GLib (ffi.h), ma libffi è installato


119

Dopo una configurazione riuscita, esci con snipped

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

Ho installato libffi e individuare ffi.h dà:

/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
Dovresti controllare config.log per vedere cosa dice di ffi. Forse non lo trova, ma lo script è difettoso e non esce con un errore. Forse è confuso dalla nuova directory include multilib. Controllare anche se l'opzione -I appropriata viene passata al compilatore.
Jester

Risposte:


270

Se hai un sistema operativo Linux basato su Debian con apt-get:

sudo apt-get install libffi-dev

Con un sistema operativo basato su Redhat:

yum install libffi-devel

Con Alpine Linux:

apk add libffi-dev

6
In alternativa, se stai utilizzando un sistema operativo basato su Redhat, usa yum install libffi-devel
Yonatan

4
Nota che se stai cross-compilando glib su un sistema a 64 bit per 32 bit, devi installare libffi-dev:i386. Non era ovvio per me. :)
Björn Lindqvist

6

Quando si completa libffi 3.0.9 dal codice sorgente, include/Makefile.ininstalla gli include in ${PREFIX}/lib/libffi-3.0.9/include directory. Sono sicuro che ci sia un motivo MERAVIGLIOSO per questo, ma ne sono infastidito.

Questa riga lo risolve, durante la compilazione di libffi:

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

Gli include verranno ora installati ${PREFIX}/include, il che è /usr/local/includeper me.

La mia ricetta completa è:

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

Risolto impostando manualmente LIBFFI_CFLAGS per la posizione di ffi.h in configure


2

Controlla la tua versione di GCC e prendi nota di questa voce nell'archivio dei bug di Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

Era la soluzione finale al mio problema particolare (sembrava esattamente come quello che hai segnalato, ma non poteva essere risolto con la soluzione sopra) ... il mio problema non aveva assolutamente nulla a che fare con LIBFFI.


1

Un vecchio filo, ma comunque ...

Dopo aver inserito i file richiesti in una posizione in cui potevano essere trovati, ho funzionato:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/

3
Un collegamento simbolico non sarebbe molto più delicato di una copia?
CousinCocaine
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.