Glibc2 on Linux: Going on from here

Note that this documentation is historic. It may no longer be very relevant. There will be no updates or further releases.

Introduction

If you have followed all the steps in this guide, you will now have a working cross-compiler installed. So now you can generate programs which are linked against glibc-2. But before you go on, there are a couple of things which are useful to know.

Using libraries

If you want to link a program to both glibc-2 and another library, that other library must also have been linked against glibc-2. So you can not use your existing ncurses and X-libraries, for example; you must first generate copies which are linked against glibc-2 (and put them into /usr/i486-linux-libc6/lib).

Files to put under /usr/i486-linux-libc6

I have tried to setup things in such a way, that glibc-2 stuff and libc5 stuff are kept completely separate. The cross-compiler must, for example, only have access to include files for which the corresponding library is also available in glibc-2 format.

When you compile programs and libraries with the cross-compiler, you can safely put the binaries in /usr/bin instead of /usr/i486-linux-libc6/bin. In fact, /usr/i486-linux-libc6/bin would be a strange place to put them, because they would only be available if you put that in your path (presumably because you wish to use the cross-compiler). In fact, it does not contain glibc-2 executables, but regular libc-5 executables that do things with the glibc-2 format! But include files and libraries should always be put under respectively /usr/i486-linux-libc6/lib and /usr/i486-linux-libc6/include.

Configuring using the cross compiler

Lots of programs, especially all GNU programs, come with a configure command. When you have set the path to /usr/i486-linux-libc6/bin, you have a i486-pc-linux-gnu environment for all practical purposes. You can safely tell this to these programs.

Switching between compiler environments

I have written a small script that faciliates switching between compilation environments. There is one draw-back though; it only works if you use bash(1) as your shell. You call switch.sh once, and after that you can use a new command switch to switch between environments:

(bash) . switch.sh # the . is obligatory!
(bash) switch i486-linux-libc6

Local hierarchy

Subdirectories of /usr/local are often used to install things you have compiled yourself, and want to keep when the operating system and/or distribution is updated. Regrettably, the cross-compiler does not seek within this hierarchy for its include-files and library-files. You will have to use explicite switches to set the seekpath if you want to install libc6-libraries or libc6-include files locally and use them to compile other things with.