Alle Tests auf dieser Seite müssen fehlerlos beendet werden, geht auch nur einer schief, solltest Du aufhören und auf Fehlersuche gehen.
So, soweit wäre alles an seinem Platz, aber funktioniert das auch so wie vorgesehen? Vertrauen ist gut, besser ist ein Test:
echo 'main(){}' > dummy.c && cc dummy.c -v -Wl,--verbose &> dummy.log && readelf -l a.out | grep ': /lib'
Als Ergebnis sollte das folgende kommen:
[Requesting program interpreter: /lib/ld-linux.so.2]
Und ob wir die richtigen Startdateien haben, testen wir so:
grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log
Hier sollte das Ergebnis so aussehen:
/usr/lib/gcc/i686-pc-linux-gnu/4.6.2/../../../crt1.o succeeded
/usr/lib/gcc/i686-pc-linux-gnu/4.6.2/../../../crti.o succeeded
/usr/lib/gcc/i686-pc-linux-gnu/4.6.2/../../../crtn.o succeeded
Das wäre schon ein beachtlicher Erfolg und eine Tasse Kaffee wert!
grep -B4 '^ /usr/include' dummy.log
Die folgenden Pfade sollten angezeigt werden:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i686-pc-linux-gnu/4.6.2/include
/usr/lib/gcc/i686-pc-linux-gnu/4.6.2/include-fixed
/usr/include
Beachte das die obigen Pfade durch das Ziel Triplet bei Dir anders lauten können!
Jetzt die Suchpfade testen:
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
Hier sollten diese vier angezeigt werden:
SEARCH_DIR("/usr/i686-pc-linux-gnu/lib")
SEARCH_DIR("/usr/local/lib")
SEARCH_DIR("/lib")
SEARCH_DIR("/usr/lib");
öffnet er auch die richtige libc?
grep "/lib.*/libc.so.6 " dummy.log
attempt to open /lib/libc.so.6 succeeded
Und benutzt den richtigen Linker:
grep found dummy.log
found ld-linux.so.2 at /lib/ld-linux.so.2
Jetzt löschen wir die folgenden Dateien:
rm -v dummy.c a.out dummy.log