Ошибка компиляции 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
deltaluca
источник
1
Вы должны проверить config.log, чтобы узнать, что он говорит о ffi. Может быть, он не находит, но скрипт глючит и не выходит с ошибкой. Возможно, его смущает новый подключаемый каталог Multilib. Также проверьте, передан ли компилятору соответствующий переключатель -I.
Jester

Ответы:

270

Если у вас ОС Linux на основе Debian с apt-get:

sudo apt-get install libffi-dev

С ОС на базе Redhat:

yum install libffi-devel

В Alpine Linux:

apk add libffi-dev
Эрик Миллиот-Мартинес
источник
6
В качестве альтернативы, если вы используете ОС на базе Redhat, используйте yum install 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 в configure

deltaluca
источник
2

Проверьте свою версию GCC и обратите внимание на эту запись в архиве ошибок Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

Это было окончательное решение моей конкретной проблемы (оно выглядело в точности так, как вы сообщаете, но не могло быть решено с помощью решения выше) ... моя проблема вообще не имела ничего общего с LIBFFI.

mindwarpstudios
источник
1

Старая ветка, но все равно ...

Поместив необходимые файлы в место, где их можно было найти, я заработал:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/
Хаммар
источник
3
Разве символическая ссылка не будет намного мягче, чем копия?
CousinCocaine