Błąd kompilacji GLib (ffi.h), ale libffi jest zainstalowane

119

Po udanej konfiguracji wykonaj wyjścia z wyciętym

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

Mam zainstalowane libffi, a lokalizacja ffi.h daje:

/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
źródło
1
Powinieneś sprawdzić config.log, aby zobaczyć, co mówi o ffi. Może go nie znajduje, ale skrypt zawiera błędy i nie kończy pracy z błędem. Prawdopodobnie jest on zdezorientowany przez nowy katalog dołączania multilib. Sprawdź również, czy do kompilatora przekazano odpowiedni przełącznik -I.
Jester

Odpowiedzi:

270

Jeśli masz system operacyjny Linux oparty na Debianie z apt-get:

sudo apt-get install libffi-dev

Z systemem operacyjnym bazującym na Redhat:

yum install libffi-devel

Z Alpine Linux:

apk add libffi-dev
Eric Milliot-Martinez
źródło
6
Alternatywnie, jeśli używasz systemu operacyjnego opartego na Redhat, użyj yum install libffi-devel
Yonatan,
4
Zauważ, że jeśli kompilujesz krzyżowo glib w systemie 64-bitowym dla 32-bitowego, musisz zainstalować libffi-dev:i386. Nie było to dla mnie oczywiste. :)
Björn Lindqvist
6

Podczas uzupełniania libffi 3.0.9 z kodu źródłowego include/Makefile.ininstaluje dołączone elementy w ${PREFIX}/lib/libffi-3.0.9/include directory. Jestem pewien, że jest CUDOWNY powód, ale mnie to denerwuje.

Ta linia rozwiązuje problem podczas kompilacji libffi:

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

Dołączenia zostaną teraz zainstalowane w ${PREFIX}/include, co jest /usr/local/includedla mnie.

Mój pełny przepis to:

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
źródło
3

Rozwiązany przez ręczne ustawienie LIBFFI_CFLAGS dla lokalizacji ffi.h w konfiguracji

deltaluca
źródło
2

Sprawdź swoją wersję GCC i zanotuj ten wpis w archiwum błędów Debiana: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

To było ostateczne rozwiązanie mojego konkretnego problemu (wyglądało dokładnie tak, jak zgłaszasz, ale nie można go rozwiązać powyższym rozwiązaniem) ... mój problem nie miał w ogóle nic wspólnego z LIBFFI.

mindwarpstudios
źródło
1

Stary wątek, ale i tak ...

Po umieszczeniu wymaganych plików w miejscu, w którym można je znaleźć, działało:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/
Hammar
źródło
3
Czy link symboliczny nie byłby znacznie delikatniejszy niż kopia?
CousinCocaine