6.12. Znovu přízpůsobujeme nástroje

Teď,když jsme nainstalvali výsledné knihovny C,je čas na to,abychom si znovu přizpůsobili nástroje.Nástroje budou přizpůsobené,aby se nové programy linkovaly na tyto nové knihovny.Je to stejný proces jako ve fázi “Přizpůsobení” na začátku Chapter 5,ale naopak.V Chapter 5,byly nástroje přeneseny s hostitelských adresářů /{,usr/}lib nových adresářů /tools/lib.Nyní budou nástroje přeneseny ze stejných adresářů /tools/lib na adresáře /{,usr/}lib directories na LFS.

Začneme přizpůsobením lenkeru.Adresáře se zdroji a kompilací byly z tohoto důvodu zachovány z druhého průchodu Binutils.Nainstaluje přizpůsobený linker,pomocí následujícího příkazu v adresáři binutils-build:

make -C ld INSTALL=/tools/bin/install install
[Note]

Note

Pokud jste vynechali dřívější varování o zachování adresářů se zdroji a kompilací Binutils z druhého průchodu v Chapter 5,nebo pokud jste jej nešťastnou náhodou vymazali,nebo je nepřístupný,navšímejte si přechozího příkazu.Výsledkem bude,že se následující balíček Binutils nalinkuje na knihovny C v /tools raději než na /{,usr/}lib.Toto sice není ideální,ale testování ukázalo,že výsledné programy Binutils jsou stejné.

Od této chvílí,bude každý program nalinkován na knihovny v /usr/lib a /lib.Extra parametr INSTALL=/tools/bin/install je potřeba,protože soubor Makefile vytvořený během druhého průchodu Binutls stále obsahuje odkaz na /usr/bin/install,který ještě není nainstalovaný.Některé hostitelské distribuce obsahují symbolický odkaz ginstall,což se může projevit v souboru Makefile a může to způsobit problém.Předchozí příkaz tomuto zabraňuje.

Nyní odstraňte adresáře se zroji a kompilací Binutils.

Dále přízpůsobte GCC specs soubor,aby ukazovat na nový dynamický linker.Zajistí to příkaz perlu:

perl -pi -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g;' \
    -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' \
        `gcc --print-file specs`

Je dobrý nápad,skontrolovat specs soubor,aby jste se ujistili,že se požadované změny skutečně provedly.

[Important]

Important

Pokud pracujete na platformě,kde se dynamický linker jmenuje jinak než ld-linux.so.2,nahraďte “ld-linux.so.2” jménem dynamického linkeru platformy.Pokud potřebujete podívejte se zpět na Section 5.2, “Toolchain Technical Notes,”.

[Caution]

Caution

Nyní je povinné zastavit se a ujistit se,že základní funkce (kompilování a linkování) přizpůsobený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 ': /lib'

Pokud všechno pracuje správně,neukážou se žádné chyby a výstup posledního příkazu bude vypadat(pouze se změnou jména platformního dynamického linkeru):

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

Note that /lib is now the prefix of our dynamic linker.

Pokud výstup nebude vypadat,jak bylo ukázáno výše,nebo nebude žádný,něco je opravdu špatně.Prozkoumejte a zpětně projděte postup,abyste zjistili,kde je problém a opravte jej.Nejčastější chybou je,že se něco přihodilo s přízpůsobeným specs souborem.Předtím než budete pokračovat,musíte vyřešit všechny problémy.

Jestliže všechno pracuje správně,vyčistěte testovací soubory:

rm dummy.c a.out