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

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

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

3

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


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.


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/

3
Wäre ein Symlink nicht viel sanfter als eine Kopie?
CousinCocaine
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.