2012-10-19 8 views
111

Nach einem erfolgreichen configure installiert haben, stellen Ausfahrten mit snippedGLib kompilieren Fehler (ffi.h), aber libffi ist

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

Ich habe libffi installiert, und suchen 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 außerdem, ob der entsprechende I-Schalter an den Compiler übergeben wird. – Jester

Antwort

3

gelöst durch manuelles LIBFFI_CFLAGS für die Lage von ffi.h in configure

2

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

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

259

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

sudo apt-get install libffi-dev 

Mit einem Redhat-Basis O:

yum install libffi-devel 
+6

Wenn Sie ein Redhat-basiertes Betriebssystem verwenden, verwenden Sie alternativ yum install libffi-devel – Yonatan

+4

Beachten Sie, dass Sie, wenn Sie glib auf einem 64bit System für 32bit kompilieren, 'libffi-dev: i386' installieren müssen. Es war nicht offensichtlich für mich. :) –

1

Ein alter Thread, aber trotzdem ...

Nachdem ich die benötigten 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

6

Bei der Kompilierung von libffi 3.0.9 aus dem Quellcode installiert include/Makefile.in die Includes in ${PREFIX}/lib/libffi-3.0.9/include directory. Ich bin mir sicher, dass dafür ein wunderbarer Grund vorliegt, aber ich ärgere mich darüber.

Diese Zeile behebt es, wenn libffi Kompilieren:

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

Das umfasst wird nun in ${PREFIX}/include installiert werden, was /usr/local/include für mich ist.

Mein volles Rezept ist:

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