Erro de compilação do GLib (ffi.h), mas o libffi está instalado

119

Depois de uma bem sucedida configure, fazer saídas com cortado

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

Tenho a libffi instalada e localize ffi.h dá:

/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
fonte
1
Você deve verificar config.log para ver o que diz sobre ffi. Talvez ele não esteja encontrando, mas o script está cheio de erros e não termina com um erro. Possivelmente, ele está confuso com o novo diretório de inclusão multilib. Verifique também se a opção -I apropriada foi passada para o compilador.
Jester

Respostas:

270

Se você tiver um sistema operacional Linux baseado em Debian com apt-get:

sudo apt-get install libffi-dev

Com um sistema operacional baseado no Redhat:

yum install libffi-devel

Com Alpine Linux:

apk add libffi-dev
Eric Milliot-Martinez
fonte
6
Alternativamente, se você estiver usando um sistema operacional baseado em Redhat, use yum install libffi-devel
Yonatan
4
Note que se você está compilando o glib em um sistema de 64 bits para 32 bits, então você precisa instalar libffi-dev:i386. Não era óbvio para mim. :)
Björn Lindqvist
6

Ao compilar libffi 3.0.9 a partir do código-fonte, o include/Makefile.ininstala o inclui no ${PREFIX}/lib/libffi-3.0.9/include directory. Tenho certeza de que há um motivo MARAVILHOSO para isso, mas estou irritado com isso.

Esta linha corrige isso, ao compilar libffi:

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

As inclusões agora serão instaladas ${PREFIX}/include, o que é /usr/local/includepara mim.

Minha receita completa é:

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

Resolvido definindo manualmente LIBFFI_CFLAGS para a localização de ffi.h no configurar

Deltaluca
fonte
2

Verifique sua versão do GCC e observe esta entrada no Debian Bug Archive: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

Foi a solução final para o meu problema específico (parecia exatamente com o que você relatou, mas não pôde ser resolvido com a solução acima) ... meu problema não tinha nada a ver com LIBFFI.

mindwarpstudios
fonte
1

Um tópico antigo, mas enfim ...

Depois de colocar os arquivos necessários em um local onde eles pudessem ser encontrados, comecei a trabalhar:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/
Hammar
fonte
3
Um link simbólico não seria muito mais suave do que uma cópia?
CousinCocaine