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

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

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

3

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



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/

3
Bukankah symlink jauh lebih lembut daripada salinan?
SepupuCocaine
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.