GLib-Kompilierungsfehler (ffi.h), aber libffi ist installiert

119

Führen Sie nach einer erfolgreichen Konfiguration Exits mit Snipped durch

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

Ich habe libffi installiert und finde ffi.h gibt:

/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
quelle
1
Sie sollten config.log überprüfen, um zu sehen, was es über ffi sagt. Vielleicht findet es es nicht, aber das Skript ist fehlerhaft und wird nicht mit einem Fehler beendet. Möglicherweise wird es durch das neue Multilib-Include-Verzeichnis verwirrt. Überprüfen Sie auch, ob der entsprechende -I-Schalter an den Compiler übergeben wird.
Jester

Antworten:

270

Wenn Sie ein Debian-basiertes Linux-Betriebssystem haben mit apt-get:

sudo apt-get install libffi-dev

Mit einem Redhat-basierten Betriebssystem:

yum install libffi-devel

Mit Alpine Linux:

apk add libffi-dev
Eric Milliot-Martinez
quelle
6
Wenn Sie ein Redhat-basiertes Betriebssystem verwenden, können Sie alternativ yum install libffi-devel
Yonatan
4
Beachten Sie, dass Sie eine Installation von glib auf einem 64-Bit-System für 32-Bit durchführen müssen libffi-dev:i386. Es war mir nicht klar. :)
Björn Lindqvist
6

Wenn libffi 3.0.9 aus dem Quellcode hinzugefügt wird, include/Makefile.ininstalliert das die Includes in der ${PREFIX}/lib/libffi-3.0.9/include directory. Ich bin mir sicher, dass es dafür einen WUNDERBAREN Grund gibt, aber ich ärgere mich darüber.

Diese Zeile behebt das Problem beim Kompilieren von libffi:

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

Die Includes werden nun in installiert ${PREFIX}/include, was /usr/local/includefür mich ist.

Mein vollständiges Rezept lautet:

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
quelle
3

Behebung durch manuelles Festlegen von LIBFFI_CFLAGS für den Speicherort von ffi.h in configure

Deltaluca
quelle
2

Überprüfen Sie Ihre GCC-Version und notieren Sie diesen Eintrag im Debian Bug Archive: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

Es war die endgültige Lösung für mein spezielles Problem (es sah genau so aus, wie Sie es gemeldet haben, konnte aber mit der obigen Lösung nicht gelöst werden) ... mein Problem hatte überhaupt nichts mit LIBFFI zu tun.

mindwarpstudios
quelle
1

Ein alter Thread, aber trotzdem ...

Nachdem ich die erforderlichen Dateien an einem Ort abgelegt hatte, an dem sie gefunden werden konnten, funktionierte es:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/
Hammar
quelle
3
Wäre ein Symlink nicht viel sanfter als eine Kopie?
CousinCocaine