Erreur de compilation GLib (ffi.h), mais libffi est installé

119

Après une configuration réussie, sortez avec snipped

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

J'ai installé libffi, et localiser ffi.h donne:

/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
la source
1
Vous devriez vérifier config.log pour voir ce qu'il dit à propos de ffi. Peut-être qu'il ne le trouve pas, mais le script est bogué et ne se termine pas avec une erreur. Il est peut-être dérouté par le nouveau répertoire d'inclusion multilib. Vérifiez également si le commutateur -I approprié est passé au compilateur.
Jester

Réponses:

270

Si vous avez un système d'exploitation Linux basé sur Debian avec apt-get:

sudo apt-get install libffi-dev

Avec un système d'exploitation basé sur Redhat:

yum install libffi-devel

Avec Alpine Linux:

apk add libffi-dev
Eric Milliot-Martinez
la source
6
Sinon, si vous utilisez un système d'exploitation basé sur Redhat, utilisez yum install libffi-devel
Yonatan
4
Notez que si vous compilez glib sur un système 64 bits pour 32 bits, vous devez installer libffi-dev:i386. Ce n'était pas évident pour moi. :)
Björn Lindqvist
6

Lorsque vous complétez la libffi 3.0.9 à partir du code source, include/Makefile.ininstalle les inclus dans le ${PREFIX}/lib/libffi-3.0.9/include directory. Je suis sûr qu'il y a une raison MERVEILLEUSE à cela, mais cela m'ennuie.

Cette ligne le corrige, lors de la compilation de libffi:

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

Les includes vont maintenant être installés dans ${PREFIX}/include, ce qui est /usr/local/includepour moi.

Ma recette complète est:

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
la source
3

Résolu en définissant manuellement LIBFFI_CFLAGS pour l'emplacement de ffi.h dans configure

deltaluca
la source
2

Vérifiez votre version GCC et notez cette entrée dans l'archive des bogues Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

C'était la solution finale à mon problème particulier (il ressemblait exactement à ce que vous rapportez, mais ne pouvait pas être résolu avec la solution ci-dessus) ... mon problème n'avait rien à voir avec LIBFFI.

mindwarpstudios
la source
1

Un vieux fil, mais de toute façon ...

Après avoir placé les fichiers requis dans un emplacement où ils pouvaient être trouvés, je l'ai fait fonctionner:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/
Hammar
la source
3
Un lien symbolique ne serait-il pas beaucoup plus doux qu'une copie?
CousinCocaine