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

Posted

技术标签:

【中文标题】GLib编译错误(ffi.h),但安装了libffi【英文标题】:GLib compile error (ffi.h), but libffi is installed 【发布时间】:2012-10-10 13:18:06 【问题描述】:

配置成功后,退出 snipped

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

【问题讨论】:

您应该检查 config.log 以了解它对 ffi 的说明。也许它没有找到它,但是脚本有问题并且不会因错误而退出。可能它被新的 multilib 包含目录混淆了。还要检查是否将适当的 -I 开关传递给编译器。 【参考方案1】:

如果你有一个基于 Debian 的 Linux 操作系统,apt-get

sudo apt-get install libffi-dev

使用基于 Redhat 的操作系统:

yum install libffi-devel

使用 Alpine Linux:

apk add libffi-dev

【讨论】:

或者,如果您使用的是基于 Redhat 的操作系统,请使用 yum install libffi-devel 请注意,如果您在 64 位系统上为 32 位交叉编译 glib,则需要安装 libffi-dev:i386。这对我来说并不明显。 :) 如果我没有sudo 权限怎么办?我已经在我的主目录中安装了libffi ubuntu.pkgs.org/18.04/ubuntu-main-amd64/…@OliverShang,下载后你得看看如何使用这个包。 @EricMilliot-Martinez 谢谢,我想我应该让管理员安装这个。【参考方案2】:

从源代码编译 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 来解决 configure 中 ffi.h 的位置

【讨论】:

如何在configure中设置?【参考方案4】:

检查您的 GCC 版本,并在 Debian 错误存档中记录以下条目:http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

这是我的特定问题的最终解决方案(它看起来与您报告的完全一样,但无法通过上述解决方案解决)...我的问题与 LIBFFI 完全无关。

【讨论】:

【参考方案5】:

一个旧线程,但无论如何......

将所需文件放在可以找到它们的位置后,我开始工作了:

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

【讨论】:

符号链接难道不会比副本更温和吗? 如果我没有sudo 访问权限怎么办

以上是关于GLib编译错误(ffi.h),但安装了libffi的主要内容,如果未能解决你的问题,请参考以下文章

GTKmm3 (GTK+ 3 C++) 编译但运行时抛出 GLib-GIO-CRITICAL 错误

glib-2.40编译安装

openSUSE 安装compass,mkmf.rb can't find,checking for ffi.h...extconf.rb failed

安装 Sharp /usr/include/vips/vips8:35:25:致命错误:glib-object.h

配置不断发现错误的 GLib

为啥我在redhat5用./configure编译的时候出现以下报错 :no package 'glib-2.0 ' found