Lỗi biên dịch GLib (ffi.h), nhưng libffi đã được cài đặt


119

Sau một cấu hình thành công, hãy thoát với Snipped

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

Tôi đã cài đặt libffi và định vị ffi.h cho:

/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
Bạn nên kiểm tra config.log để xem nó nói gì về ffi. Có thể nó không tìm thấy nó, nhưng tập lệnh có lỗi và không thoát ra với lỗi. Có thể nó bị nhầm lẫn bởi thư mục bao gồm multilib mới. Đồng thời kiểm tra xem công tắc -I thích hợp có được chuyển đến trình biên dịch hay không.
Jester

Câu trả lời:


270

Nếu bạn có Hệ điều hành Linux dựa trên Debian với apt-get:

sudo apt-get install libffi-dev

Với hệ điều hành Redhat-base:

yum install libffi-devel

Với Alpine Linux:

apk add libffi-dev

6
Ngoài ra, nếu bạn đang sử dụng Redhat dựa OS, sử dụng yum install libffi-devel
Yonatan

4
Lưu ý rằng nếu bạn đang biên dịch chéo glib trên hệ thống 64 bit cho 32 bit thì bạn cần phải cài đặt libffi-dev:i386. Nó không rõ ràng với tôi. :)
Björn Lindqvist

6

Khi biên dịch libffi 3.0.9 từ mã nguồn, include/Makefile.incài đặt bao gồm trong ${PREFIX}/lib/libffi-3.0.9/include directory. Tôi chắc rằng có một lý do HOÀN TOÀN cho điều đó, nhưng tôi khó chịu vì điều đó.

Dòng này sửa nó, khi biên dịch libffi:

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

Các bao gồm bây giờ sẽ được cài đặt trong ${PREFIX}/include, đó là /usr/local/includedành cho tôi.

Công thức đầy đủ của tôi là:

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

Giải quyết bằng cách thiết lập thủ công LIBFFI_CFLAGS cho vị trí của ffi.h trong cấu hình


2

Kiểm tra phiên bản GCC của bạn và ghi lại mục nhập này trong Kho lưu trữ lỗi Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

Đó là giải pháp cuối cùng cho vấn đề cụ thể của tôi (nó trông giống hệt như những gì bạn báo cáo, nhưng không thể được giải quyết bằng giải pháp ở trên) ... vấn đề của tôi không liên quan gì đến LIBFFI cả.


1

Một chủ đề cũ, nhưng dù sao ...

Sau khi đặt các tệp cần thiết vào vị trí có thể tìm thấy chúng, tôi đã làm cho nó hoạt động:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/

3
Một liên kết tượng trưng sẽ không nhẹ nhàng hơn nhiều so với một bản sao phải không?
CousinCocaine,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.