GLib编译错误(ffi.h),但已安装libffi。

119

配置成功后,make命令以省略退出。

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

我已经安装了libffi,并且执行"locate 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有什么说法。也许它没有找到它,但脚本存在错误却没有报错退出。可能它被新的多库包含目录所困惑。还要检查编译器是否传递了适当的-I开关。 - Jester
5个回答

271

如果你使用基于Debian的Linux操作系统,使用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。 - Yonatan
4
请注意,如果您在64位系统上进行32位的glib交叉编译,则需要安装“libffi-dev:i386”。这对我来说并不明显。 :) - Björn Lindqvist
如果我没有sudo权限怎么办?我已经在我的主目录中安装了libffi - OliverShang
https://ubuntu.pkgs.org/18.04/ubuntu-main-amd64/libffi-dev_3.2.1-8_amd64.deb.html @OliverShang,在下载完软件包后,你需要查阅如何使用它的相关资料。 - Eric Milliot-Martinez
1
@EricMilliot-Martinez 谢谢,我想我应该向管理员请求安装这个。 - OliverShang
显示剩余2条评论

6

当从源代码编译libffi 3.0.9时,include/Makefile.in 将包含文件安装在 ${PREFIX}/lib/libffi-3.0.9/include目录下。我相信这样做有很好的理由,但我对此感到烦恼。

以下是解决这个问题的代码,用于编译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

4

通过在配置中手动设置LIBFFI_CFLAGS来解决ffi.h的位置


如何在配置文件中设置? - OliverShang

2

检查您的GCC版本,并在Debian Bug Archive中注意此条目: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
如果我没有sudo访问权限怎么办? - OliverShang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接