5.11. GCC-3.4.3 - 2. průchod

Průměrný čas kompilace: 11.0 SBU
Potřebné volné místo: 292 MB
Instalace závisí na: Bash, Binutils, Coreutils, Diffutils, Findutils, Gawk, Gettext, Glibc, Grep, Make, Perl, Sed, and Texinfo

5.11.1. Re-instalace GCC

O tomto balíčku je známo, že má problémy, pokud jsou jeho výchozí optimalizační příznaky (včetně -march a -mcpu voleb) změněné. Pokud nějaké proměnné prostředí přepisují tyto výchozí optimalizace jako CFLAGS a CXXFLAGS, odstraňte je při kompilaci GCC.

Nástroje potřebné pro testování GCC a Binutils — Tcl, Expect a DejGNU— jsou již nainstalované. GCC a Binutils mohou být zkompilovány znovu a nalinkované na nové Glibc a správně zkontrolované (pokud v této kapitole spouštíte testy). Uvědomte si, že tyto testy jsou velmi závislé na správné funkci PTY hostitele. PTy jsou nejčastěji implementovány přes souborový systém devpts. Podívejte se, jestli je hostitelský systém správně nastaven pomocí rychlého testu:

expect -c "spawn ls"

Odpovědí může být:

The system has no more ptys.  
Ask your system administrator to create more.

Pokud jste obdrželi předchozí zprávu, hostitelský systém nemá správně nastavené PTY. V tomto případě nemůžete spouštět testy GCC a Binutils, dokud tento problém nevyřešíte. Prosím, podítejte se na LFS FAQ http://www.linuxfromscratch.org//lfs/faq.html#no-ptys, abyste získali informace jak nastavit PTY.

Nejprve napravte známý problém a udělejte základní přízpůsobení:

patch -Np1 -i ../gcc-3.4.3-no_fixincludes-1.patch
patch -Np1 -i ../gcc-3.4.3-specs-2.patch

První patch vypíná GCC skript fixincludes. Toto bylo v krátkosti zmíněno dříve, ale zde se nachází větší výklad. Za normálních podmínek GCC skript fixincludes skenuje systémové hlavičkové soubory, které potřebují být opravené. Může najít i některé hlavičkové soubory Glibc na hostitelském systému, které opraví a uloží do privátní include složky. V Chapter 6, poté co budou nainstalované novější Glibc, bude prohledávaná tato privátní include složka, před systémovou include složkou. Toto může vést k tomu, že GCC najde opravené hlavičky z hostitele, které nemusí souhlasit s verzí použitou pro systém LFS.

Druhý patch změní výchozí umístění dynamického lineru GCC (typicky ld-linux.so.2). Také odstraní /usr/include z GCC include vyhledávací cesty. Nynější patchování souboru specs místo upravování zajistí, že bude během kompilace použit nový dynamický linker. Takto se výsledné (a dočasné) binárky nalinkují před nové Glibc.

[Important]

Important

Přechozí patche jsou kritické, aby se zajistila úspěšná kompilace. Nezapomeňte je aplikovat.

Znovu vytvořte oddělenou kompilační složku:

mkdir ../gcc-build
cd ../gcc-build

Před začátkem kompilace GCC nezapomeň zrušit všechny proměnné, které přepisují výchozí optimalizační příznaky.

Nyní připravte GCC na kompilaci:

../gcc-3.4.3/configure --prefix=/tools \
    --libexecdir=/tools/lib --with-local-prefix=/tools \
    --enable-clocale=gnu --enable-shared \
    --enable-threads=posix --enable-__cxa_atexit \
    --enable-languages=c,c++ --disable-libstdcxx-pch

Význam nových konfiguračních voleb:

--enable-clocale=gnu

Toto zajišťuje, že je za všech podmínek použit správný model lokalizace z knihoven C++. Pokud konfigurační skript najte lokalizace de_DE nainstalovanou, vybere správný model lokalizace gnu. Pokud ale není lokalizace de_DE nainstalovaná, riskujete, že se zkompilují nekompatibilní knihovny C++, protože se vybere nesprávný model lokalizace.

--enable-threads=posix

Toto povoluje manipulaci s vyjímakami C++ pro multi-vláknový kód.

--enable-__cxa_atexit

Tato volba povoluje použití raději __cxa_atexit, než atexit, k registraci C++ destruktorů pro lokální statické a globální objekty. Tato volba je základní změnu handleru plně vyhovující standardům. To také ovlivní C++ API a proto výsledné sdílené knohovny C++ a C++ programy nefungují pod jinými Linuxovými distribucemi.

--enable-languages=c,c++

Tato volba zajišťuje, že jsou zkompilovány kompilery C i C++.

--disable-libstdcxx-pch

Nekompiluje hlavičky prekompileru (pre-compiled header-PCH) pro libstdc++. Toto zabírá hodně místa a my to nepoužijeme

Zkompilujte balíček:

make

Není zde použit parametr bootstrap, protože kompiler použit ke kompilaci tohoto GCC je ze stejných zdrojů.

Kompilace je teď hotova. Jak bylo dříve poznamenáno, spouštění testů pro dočasné nástroje kompilované v této kapitole není povinné. Pokud chcete testy i přesto spustit, použijte následující příkaz:

make -k check

Příznak -k je použit, aby se testy nezastavovaly na první chybě. Testy GCC jsou velmi komplexní a je téměř jisté, že se vyskytne několik chyb. K získání výsledků testů spusťte:

../gcc-3.4.3/contrib/test_summary

Pokud chcete pouze souhrn, projeďte výstup rourou grep -A7 Summ.

Výsledky můžete porovnat s těmi, které se nacházejí na http://www.linuxfromscratch.org/lfs/build-logs/6.1/.

Může se ukázat několik nečekaných chyb. Vývojaři GCC se obvykle obávají těchto chyb, ale ještě je nevyřešili. Pokud se test moc neliší o těch na URL výše, můžete bezpečně pokračovat.

Nainstalujte balíček:

make install
[Note]

Note

Zde je velmi doporučeno zopakovat test, který jsme připravili dříve v této kapitole. Podívějte se zpátky do Section 5.7, “Nastavení nástrojů,” a zopakujte kompilační test. Pokud je výsledek špatný, nejčastější důvod je, že GCC Specs patch nebyl správně aplikován.

Podrobnosti o tomto balíčku se nacházejí v Section 6.14.2, “Obsah GCC.”