GLib compile error (ffi.h), but libffi is installed
Asked Answered
S

5

119

After a succesful configure, make exits with snipped

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

I have libffi installed, and locate ffi.h gives:

/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
Sansculotte answered 19/10, 2012 at 21:8 Comment(1)
You should check config.log to see what it says about ffi. Maybe it isn't finding it, but the script is buggy and doesn't exit with an error. Possibly it is confused by the new multilib include directory. Also check if the appropriate -I switch is passed to the compiler.Emilio
W
271

If you have a Debian-based Linux OS with apt-get:

sudo apt-get install libffi-dev

With a Redhat-base OS:

yum install libffi-devel

With Alpine Linux:

apk add libffi-dev
Wendiwendie answered 8/7, 2013 at 1:49 Comment(7)
Alternatively, if you're using Redhat based OS, use yum install libffi-develDraftee
Note that if you are cross-compiling glib on a 64bit system for 32bit then you need to install libffi-dev:i386. It wasn't obvious to me. :)Ewan
What if I don't have sudo permission? I have installed libffi in my home directory.Soporific
ubuntu.pkgs.org/18.04/ubuntu-main-amd64/… @OliverShang, you'll have to look up how to use the package after you've downloaded it.Wendiwendie
@EricMilliot-Martinez I mean I have compiled the package properly. Your link did not specify how to designate the path of libffi when compiling python. I can't copy it to /usr/ since I don't have sudo permission.Soporific
@OliverShang, yes you mentioned you didn't have sudo permission and you're not able to ask an admin, hmm. Perhaps go into whichever python package is using libffi and edit the package itself in order to give it the new location you've put libffi in. The reason why is simple, it (libffi) is not in the default /usr/ location it's normally in. How is the python package suppose to know that? You now need to edit and tell it the new location, you do that by going into the package and editing it. You have a unique problem that's likely gonna require a unique solution.Wendiwendie
@EricMilliot-Martinez Thanks, I think I should ask the admin to install this.Soporific
F
6

When compling libffi 3.0.9 from source code, the include/Makefile.in installs the includes in the ${PREFIX}/lib/libffi-3.0.9/include directory. I'm sure there's a WONDERFUL reason for that, but I'm annoyed by it.

This line fixes it, when compiling libffi:

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

The includes will now be installed in ${PREFIX}/include, which is /usr/local/include for me.

My full recipe is:

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
Fey answered 19/11, 2013 at 0:49 Comment(0)
S
4

Resolved by manually setting LIBFFI_CFLAGS for location of ffi.h in configure

Sansculotte answered 19/10, 2012 at 21:46 Comment(1)
How to set that in configure?Soporific
T
2

Check your GCC version and note this entry in the Debian Bug Archive: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=523869

It was the final solution to my particular issue (it looked exactly like what you report, but couldn't be solved with the solution above)... my problem had nothing to do with LIBFFI at all.

Tweeter answered 1/2, 2013 at 12:15 Comment(0)
E
1

An old thread, but anyway...

After putting the required files in a location where they could be found, I got it working:

cp /usr/include/x86_64-linux-gnu/ffi* /usr/local/include/
cp /usr/lib/libffi.so /usr/local/lib/
Equation answered 5/8, 2013 at 12:17 Comment(2)
Wouldn't a symlink be much more gentle than a copy?Schilling
What if I don't have sudo accessSoporific

© 2022 - 2024 — McMap. All rights reserved.