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
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!