Kesalahan kompilasi GLib (ffi.h), tetapi libffi diinstal

119

Setelah konfigurasi berhasil, keluarlah dengan snipped

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

Saya telah menginstal libffi, dan menemukan ffi.h memberikan:

/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.dll
sumber
1
Anda harus memeriksa config.log untuk melihat apa yang dikatakan tentang ffi. Mungkin tidak menemukannya, tetapi skripnya bermasalah dan tidak keluar dengan kesalahan. Mungkin bingung dengan direktori include multilib baru. Juga periksa apakah sakelar -I yang sesuai diteruskan ke kompiler.
Jester

Jawaban:

270

Jika Anda memiliki OS Linux berbasis Debian dengan apt-get:

sudo apt-get install libffi-dev

Dengan OS berbasis Redhat:

yum install libffi-devel

Dengan Alpine Linux:

apk add libffi-dev
Eric Milliot-Martinez
sumber
6
Atau, jika Anda menggunakan OS berbasis Redhat, gunakan yum install libffi-devel
Yonatan
4
Perhatikan bahwa jika Anda melakukan kompilasi silang glib pada sistem 64bit untuk 32bit, maka Anda perlu menginstal libffi-dev:i386. Itu tidak jelas bagi saya. :)
Björn Lindqvist
6

Saat melengkapi libffi 3.0.9 dari kode sumber, include/Makefile.inmenginstal termasuk dalam file ${PREFIX}/lib/libffi-3.0.9/include directory. Saya yakin ada alasan yang INDAH untuk itu, tapi saya kesal karenanya.

Baris ini memperbaikinya, saat mengkompilasi libffi:

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

Penyertaan sekarang akan dipasang ${PREFIX}/include, yang /usr/local/includeuntuk saya.

Resep lengkap saya adalah:

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

Diatasi dengan mengatur LIBFFI_CFLAGS secara manual untuk lokasi ffi.h di konfigurasi

deltaluca.dll
sumber
2

Periksa versi GCC Anda dan catat entri ini di Arsip Bug Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

Itu adalah solusi terakhir untuk masalah khusus saya (terlihat persis seperti yang Anda laporkan, tetapi tidak dapat diselesaikan dengan solusi di atas) ... masalah saya tidak ada hubungannya sama sekali dengan LIBFFI.

mindwarpstudios
sumber
1

Sebuah utas lama, tapi bagaimanapun ...

Setelah meletakkan file yang diperlukan di lokasi di mana mereka dapat ditemukan, saya membuatnya berfungsi:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/
Hammar
sumber
3
Bukankah symlink jauh lebih lembut daripada salinan?
SepupuCocaine