GLibコンパイルエラー(ffi.h)、ただしlibffiがインストールされている


119

構成が成功したら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

1
config.logをチェックして、ffiに関する内容を確認する必要があります。多分それはそれを見つけていませんが、スクリプトはバグがあり、エラーで終了しません。おそらく、それは新しいmultilib includeディレクトリーによって混乱しています。また、適切な-Iスイッチがコンパイラに渡されているかどうかも確認してください。
Jester

回答:


270

DebianベースのLinux OSを使用している場合apt-get

sudo apt-get install libffi-dev

RedhatベースのOSの場合:

yum install libffi-devel

Alpine Linuxの場合:

apk add libffi-dev

6
または、RedhatベースのOSを使用している場合は、yum install libffi-devel
Yonatan

4
64ビットシステムで32ビットのglibをクロスコンパイルする場合は、をインストールする必要があることに注意してくださいlibffi-dev:i386。それは私には明らかではありませんでした。:)
ビョルンLindqvist

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


2

GCCのバージョンを確認し、Debianバグアーカイブのこのエントリに注意してください: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 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.