5.7. Nastavení nástrojů

Nyní když máme dočasné knihovny s C nainstalované, všechny nástroje kompilované ve zbytku této kapitoly mohou být nalinkované na tyto knihovny. Abychom to dokončili, musíme upravit soubory specs linkeru a compileru.

Linker, který jste upravili na konci prvního průchodu Binutils, nainstalujte následujícím příkazem z adresáře binutils-build:

make -C ld install

Od této chvíle, bude všechno nalinkováno pouze na knihovny v adresáři /tools/lib.

[Note]

Note

Pokud jste nedodrželi dřívější varování o zachování zdrojů o kompilaci Binutils, nevšímejte si předchozího příkazy. Je pouze malá pravděpodobnost, že se následující knihovny nalinkují na knihovny hostitele. Není to ideální, ale není to hlavní problém. Situaci napravíte při druhém průchodu Binutils.

Teď, když je nainstalovaný upravený linker, můžete vymazat adresáře s kompilací a zdroji Binutils.

Dalším úkolem je upravit specs soubor GCC, aby ukazoval na nový dynamický linker. Zajistí to jednoduchý skript sedu:

SPECFILE=`gcc --print-file specs` &&
sed 's@ /lib/ld-linux.so.2@ /tools/lib/ld-linux.so.2@g' \
    $SPECFILE > tempspecfile &&
mv -f tempspecfile $SPECFILE &&
unset SPECFILE

Doporučujeme, abyste předchozí příklad zkopírovali a vložili a zajistili tak přesnost. Také můžete soubor specs editovat ručně. Musíte nahradit všechny výskyty “/lib/ld-linux.so.2” za “/tools/lib/ld-linux.so.2

Ujistěte se prohlednutím souboru specs, že se provedly všechny změny.

[Important]

Important

Pokud pracujete s platformou, kde se dynamický linker jmenuje jinak než ld-linux.so.2, změňte jméno dynamického linkeru v předchozích příkazech. Pokud potřebujete, podívejte se zpátky na Section 5.2, “Toolchain Technical Notes,”.

Je možné, že se některé soubory include objevily ve složce s GCC. To se může přihodit jako výsledek GCC procesu “fixincludes”, který běží jako část kompilace GCC. Toto bude podrobněji vysvětleno později v této kapitole. Abyste toto vyloučili, spusťte následující příkaz:

rm -f /tools/lib/gcc/*/*/include/{pthread.h,bits/sigthread.h}
[Caution]

Caution

Nyní je povinné zastavit se a ujistit se, že základní funkce (kompilování a linkování) nových nástrojů pracují správně. Pro kontrolu spusťte následující příkazy:

echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'

Pokud všechno pracuje správně, neukážou se žádné chyby a výstup posledního příkazu bude vypadat:

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

Všimněte si, že /tools/lib značí prefix dynamického linkeru.

Pokud výstup neukazuje něco jako výše nebo se neukáže žádný výstup, něco je špatně. Prozkoumejte a vraťte se, abyste zjistili, kde je problém a napravte jej. Tuto chybu musíte, před tím, než budete pokračovat napravit. Nejprve spusťte kontrolu znova a použijte gcc místo cc. Pokud toto pracuje dobře, potom jste zapomněli udělat odkaz na /tools/bin/cc. Znovu se podívejte na Section 5.4, “GCC-3.4.3 - 1. průchod,” a nainstalujte odkaz. Dále se ujistěte, že je správně nastavena PATH. Toto uděláte spuštěním echo $PATH a kontrolou, že /tools/bin se nachází na začátku. Pokud je PATH špatně nastavena, může to znamenat ,že nejste přihlášení jako uživatel lfs, nebo jste udělali něco špatně v Section 4.4, “Nastavení prostředí.” Další možnost je, že se něco přihodilo se souborem specs, který jsme upravili dříve. V tomto případě znovu upravte soubor specs a pozorně zkopírujte a vložte příkazy.

Pokud je všechno v pořádku, odstraňte testovací soubory:

rm dummy.c a.out