Помилка компіляції GLib (ffi.h), але libffi встановлений


119

Після успішної конфігурації зробіть виходи з фрагментами

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

У мене встановлено libffi, і знайти ffi.h дає:

/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
Слід перевірити config.log, щоб побачити, що він говорить про ffi. Можливо, він не знаходить його, але сценарій баггі і не виходить із помилкою. Можливо, це переплутає новий каталог multilib include. Також перевірте, чи відповідний комутатор -I переданий компілятору.
Єстер

Відповіді:


270

Якщо у вас ОС Linux на базі Debian apt-get:

sudo apt-get install libffi-dev

З ОС на базі Redhat:

yum install libffi-devel

З альпійським Linux:

apk add libffi-dev

6
З іншого боку , якщо ви використовуєте ОС Redhat на основі, використання ням встановити libffi-Devel
Йонатан

4
Зауважте, що якщо ви перехрещуєте glib на 64-бітній системі для 32-бітної, то вам потрібно встановити libffi-dev:i386. Мені це було не очевидно. :)
Бьорн Ліндквіст

6

При компіляції libffi 3.0.9 з вихідного коду include/Makefile.inвстановлює включення в ${PREFIX}/lib/libffi-3.0.9/include directory. Я впевнений, що в цьому є ЧУДОВА причина, але мене це дратує.

Цей рядок виправляє його під час компіляції libffi:

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

Тепер включення буде встановлено в ${PREFIX}/include, що /usr/local/includeдля мене.

Мій повний рецепт:

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

Вирішено шляхом встановлення LIBFFI_CFLAGS вручну для розташування ffi.h в налаштуваннях


2

Перевірте свою версію GCC та відзначте цей запис у архіві Debian Bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

Це було остаточне рішення мого конкретного питання (воно виглядало точно так, як ви повідомляєте, але не вдалося вирішити з рішенням вище) ... моя проблема взагалі не мала нічого спільного з LIBFFI.


1

Стара нитка, але все одно ...

Помістивши потрібні файли там, де їх можна було знайти, я працював:

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

3
Невже символьне посилання не буде набагато ніжніше, ніж копія?
CousinCocaine
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.