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

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

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

3

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


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.


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/

3
Un lien symbolique ne serait-il pas beaucoup plus doux qu'une copie?
CousinCocaine
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.