0

I used apt-get to install the fastcgi package recently (sudo apt-get install libfcgi) and my Pi3B duly chuckled away then announced that it hwas finished. BUT when I tried to compile the backend to lighttpd that I am writing in C, I was told 'cannot find fcgi_stdio.h'. Now I have been writing this backend on a desktop Linux box and I installed libfcgi from the sources and I know that these include files should have also been installed by apt-get. { fcgi_config.h fcgi_stdio.h fcgiapp.h fcgimisc.h fcgio.h fcgios.h {

On checking for the libraries, I found that only the shared library had been installed - without its link table. The static library was also not installed. The list of libraries installed should look like:

{
    libfcgi.a
    libfcgi.la*
    libfcgi.so -> libfcgi.so.0.0.0*
    libfcgi.so.0 -> libfcgi.so.0.0.0*
    libfcgi.so.0.0.0*
}

Can somebody please point me to a COMPLETE libfcgi package for the Raspberry Pi 3?

And before someone tells me that I should get the source and compile it on the Pi, I've tried that and it opens an even bigger can of smelly worms. ./configure doesn't complete successfully, make complains that @LIBTOOL@ is missing, gcc's man pages are absent - I could go on and on. Peter.

Deleuze
  • 236
  • 2
  • 10

1 Answers1

2

This is in part a duplicate of these questions:

Although since apt has a new, simplified, slightly snazzier interface I'll use the new version here and make the common point more clear.

I know that these include files should have also been installed by apt-get

Really? Why?

Library packages are usually installed as dependencies of other binaries. To serve at runtime, the include/header files (i.e., .h files) are not required, so these are kept in a separate -dev package (there may be other non-essential odds and ends as well, and possibly debugging symbols are in yet another package, but gdb should explain this to you when you need them).

So to find it, a general approach might be:

apt search libfcgi | grep -B 2 dev

The -B 2 here includes the two previous lines of the search hit, since the output of apt search (vs. the older style apt-cache search) is is split across several lines and the description will be on one of its own preceded by the package name. In this case it's actually unnecessary since we're looking for a hit on part of the package name (dev) and so the output ends up as:

Sorting...
Full Text Search...
libfcgi-dev/stable 2.4.0-8.3 armhf

So the headers can probably be installed via apt install libfcgi-dev. Likely in this case so are the static archives (see below).

Another way of doing this, which provides more confirmation, is to apt install apt-file, then e.g.:

> apt-file search fcgi_config.h
libfcgi-dev: /usr/include/fcgi_config.h

Beware while this one works, it is dependent on the package database info being correct, which is sometimes not the case on Raspbian -- presumably it happens when lib packages must be split in odd ways but there is not the resources people wise to manage them all properly. There are a few examples of this coming up.

I should get the source and compile it on the Pi

This is rarely necessary and should only be done as a last resort or because you need a particular version of something which is unavailable. In that case you install to /usr/local and subsequently run ldconfig for libraries so the linker will index them.

make complains that @LIBTOOL@ is missing

Solving this involves the same general approach...

apt search libtool

There are various hits but hint, it's just libtool. There should be some meta package that's good for that and various other things such as "build-essential" but I am not sure what it is called (although a quick search for "linux debian apt install build essential" confirms that it is; remember, Raspbian is essentially Debian but Debian is much more extensively documented, so searching that way will lead to better results; you'll likely also get Ubuntu hits but those are very often applicable as well, particularly when it comes to package names).

gcc's man pages are absent

That's an odd one but I notice it's true on Raspbian even when gcc is installed. apt search gcc | grep doc turns up various doc packages.

Looking in /usr/share/man, you can see man pages on Raspbian are installed in gzipped form with a section number suffix, e.g., foobar.3.gz. The basename is the name of the man page; from the descriptions of man page sections in man man section 1 ("Executable programs or shell commands") is a good guess, but apt-file search gcc.1.gz implies some odd things, one of which is that the gcc package includes a c89-gcc and c99-gcc man page -- but these are just short stubs.

Sometimes the online Debian search works better, and trying gcc.1.gz via Search the contents of packages does claim it's in gcc-doc, except here we have a discrepancy -- there is no such package in Raspbian. They've done something odd again. I believe this is consequent of the fact that the architecture doesn't correspond to any of the Debian ARM branches (including armhf -- don't get confused by this), and the core C library and compiler are very specifically for ARM1176JZ(F)-S.

But there is a gcc-4.9-doc, and subsequent to apt install gcc-4.9-doc (a zany 14 MB...), you'll have a man gcc. It may actually be in the dependency, gcc-doc-base but a further likely Raspbian specific flub is that dpkg -L doesn't show it in either one (or anything that would add up to 14 MB). Go figure. This is probably also why apt-file doesn't find it properly.

Can somebody please point me to a COMPLETE libfcgi package for the Raspberry Pi 3?

The online Debian search claims it is in the -dev package. apt-file search on Raspbian doesn't find it, but as we've seen, it is imperfect. Since you're installing the dev package anyway, check to see if it's in /usr/lib subsequently:

find /usr/lib -name libfcgi.a

If it's not, it has been left out and presumably either you make do with the .so or else build from source.

goldilocks
  • 58,859
  • 17
  • 112
  • 227
  • Thank you. The -dev search found what I needed to compile my backend. Now I'm struggling with lighttpd's ratty treatment of paths in its config but I'm used to that. – OldBikerPete Sep 08 '16 at 23:27