5.6. Anpassen der Toolchain

Die provisorischen Bibliotheken für C sind also da und mit denen sollen nun alle Werkzeuge verbunden werden. Zum Abschluss sollen die speziellen Dateien zum Crosskompilieren noch auf den dynamischen linker in /tools ausgerichtet sein. Dazu muss die Datei specs noch dorthin gebracht werden, wo sie alles notwendige vorfindet, per sed kann dann GCC mit dem dynamischen linker zusammenarbeiten. Sehr praktisch dabei ist, der linker wird von /lib aus unter /tools gefunden. Da das folgende ein paar Zeichen enthält, die von diversen Zeichensätzen schlicht nicht unterscheidbar dargestellt werden, nun doch einmal Markieren und Kopieren verwenden, oft erspart das aufwendige Fehlersuche und ständig wiederkehrende Rückfragen:

SPECS=`dirname $($MOLLI_TGT-gcc -print-libgcc-file-name)`/specs
$MOLLI_TGT-gcc -dumpspecs | sed \
  -e 's@/lib\(64\)\?/ld@/tools&@g' \
  -e "/^\*cpp:$/{n;s,$, -isystem /tools/include,}" > $SPECS 
echo "New specs file is: $SPECS"
unset SPECS
[Achtung]

Achtung

an diesem Punkt ist es wichtig unseren neuen Compiler zu testen:

echo 'main(){}' > dummy.c
$MOLLI_TGT-gcc -B/tools/lib dummy.c
readelf -l a.out | grep ': /tools'

Wenn alles richtig gemacht wurde sollte der letzte Befehl folgendes Ergebnis zeigen:

[Requesting program interpreter: /tools/lib/ld-linux.so.2]

Bei einem 64bit System dies:

[Requesting program interpreter: /tools/lib/ld-linux-x86-64.so.2]

Jetzt ist unumgänglich, dass /tools/lib als dem dynamischen Linker vorangestellt erscheint.

Taucht das aber nun nicht auf, oder kommt dabei rein gar nichts heraus, dann ging etwas schief. Es kann nur mehr tief durch geatmet werden, die Ärmel hoch gekrempelt und mit der Fehlersuche begonnen werden, sonst gibt es keine einzige andere Möglichkeit. Möglicherweise wurde beim Kopieren ein Fehler gemacht. Erste wenn hier alles perfekt läuft und nur dann, kann der nächste Befehl erfolgen:

rm -v dummy.c a.out

Aber wirklich nur dann!