Stații de lucru online OnWorks Linux și Windows

logo

Găzduire online gratuită pentru stații de lucru

<Înapoi | Cuprins | Următor>

5.5.1. Instalarea Cross GCC

imagine

GCC necesită acum pachetele GMP, MPFR și MPC. Deoarece este posibil ca aceste pachete să nu fie incluse în distribuția dvs. gazdă, ele vor fi create cu GCC. Despachetați fiecare pachet în directorul sursă GCC și redenumiți directoarele rezultate, astfel încât procedurile de construire GCC să le folosească automat:


notițe

Există frecvente neînțelegeri despre acest capitol. Procedurile sunt aceleași ca în orice alt capitol, așa cum a fost explicat mai devreme (instrucțiuni de construire a pachetului). Mai întâi extrageți tarball-ul gcc din directorul surse și apoi schimbați în directorul creat. Numai atunci ar trebui să continuați cu instrucțiunile de mai jos.

notițe

Există frecvente neînțelegeri despre acest capitol. Procedurile sunt aceleași ca în orice alt capitol, așa cum a fost explicat mai devreme (instrucțiuni de construire a pachetului). Mai întâi extrageți tarball-ul gcc din directorul surse și apoi schimbați în directorul creat. Numai atunci ar trebui să continuați cu instrucțiunile de mai jos.


tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr

tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp

tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc

tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr

tar -xf ../gmp-6.1.2.tar.xz mv -v gmp-6.1.2 gmp

tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc

imagine

în gcc/config/{linux,i386/linux{,64}}.h

în gcc/config/{linux,i386/linux{,64}}.h

$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \

's@/usr@/tools@g' $fișier.orig > $fișier

$file{,.orig} 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \

's@/usr@/tools@g' $fișier.orig > $fișier

Următoarea comandă va schimba locația linkerului dinamic implicit al GCC pentru a-l folosi pe cel instalat /instrumente. De asemenea, elimină / usr / include din calea de căutare include GCC. Emisiune:


pentru dosar do

cp -uv sed -e

-e

pentru dosar do

cp -uv sed -e

-e


ecou'

#undef STANDARD_STARTFILE_PREFIX_1

#undef STANDARD_STARTFILE_PREFIX_2

#define STANDARD_STARTFILE_PREFIX_1 „/tools/lib/”

#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file atinge $file.orig

făcut

ecou'

#undef STANDARD_STARTFILE_PREFIX_1

#undef STANDARD_STARTFILE_PREFIX_2

#define STANDARD_STARTFILE_PREFIX_1 „/tools/lib/”

#define STANDARD_STARTFILE_PREFIX_2 ""' >> $file atinge $file.orig

făcut

În cazul în care cele de mai sus pare greu de urmărit, haideți să le descompunem puțin. Mai întâi copiem fișierele gcc/config/linux.h, gcc/config/i386/linux.h, și gcc/config/i368/linux64.h la un fișier cu același nume, dar cu un sufix adăugat de „.orig”. Apoi, prima expresie sed adaugă „/tools” fiecărei instanțe de „/lib/ld”, „/lib64/ld” sau „/lib32/ld”, în timp ce a doua înlocuiește instanțele hard-coded ale „/usr”. Apoi, adăugăm declarațiile noastre define care modifică prefixul implicit al fișierului de pornire la sfârșitul fișierului. Rețineți că „/” final în „/tools/lib/” este necesar. În cele din urmă, folosim atingeţi pentru a actualiza marca temporală a fișierelor copiate. Când este utilizat împreună cu CPU, acest lucru previne modificări neașteptate ale fișierelor originale în cazul în care comenzile sunt executate din greșeală de două ori.


În cele din urmă, pe gazdele x86_64, setați numele de director implicit pentru bibliotecile pe 64 de biți la „lib”:


caz $(uname -m) în x86_64)

sed -e '/m64=/s/lib64/lib/' \

-i.orig gcc/config/i386/t-linux64

;;

ESAC

caz $(uname -m) în x86_64)

sed -e '/m64=/s/lib64/lib/' \

-i.orig gcc/config/i386/t-linux64

;;

ESAC

Documentația GCC recomandă construirea GCC într-un director de compilare dedicat:


mkdir -v build cd build

mkdir -v build cd build

Pregătiți GCC pentru compilare:


../configurează \

--target=$LFS_TGT \

--prefix=/instrumente \

--with-glibc-version=2.11 \

--with-sysroot=$LFS \

--with-newlib \

--fără-anteturi \

--with-local-prefix=/tools \

--with-native-system-header-dir=/tools/include \

--disable-nls \

--disable-shared \

--disable-multilib \

--disable-decimal-float \

--disable-threads \

--disable-libatomic \

--disable-libgomp \

--disable-libquadmath \

--disable-libssp \

--disable-libvtv \

--disable-libstdcxx \

--enable-languages=c,c++

../configurează \

--target=$LFS_TGT \

--prefix=/instrumente \

--with-glibc-version=2.11 \

--with-sysroot=$LFS \

--with-newlib \

--fără-anteturi \

--with-local-prefix=/tools \

--with-native-system-header-dir=/tools/include \

--disable-nls \

--disable-shared \

--disable-multilib \

--disable-decimal-float \

--disable-threads \

--disable-libatomic \

--disable-libgomp \

--disable-libquadmath \

--disable-libssp \

--disable-libvtv \

--disable-libstdcxx \

--enable-languages=c,c++

Semnificația opțiunilor de configurare:


--cu-newlib

Deoarece o bibliotecă C funcțională nu este încă disponibilă, acest lucru asigură că constanta inhibit_libc este definită la construirea libgcc. Acest lucru împiedică compilarea oricărui cod care necesită suport libc.

--fără-anteturi

Când se creează un cross-compiler complet, GCC necesită antete standard compatibile cu sistemul țintă. În scopurile noastre, aceste anteturi nu vor fi necesare. Această comutare împiedică GCC să le caute.

--with-local-prefix=/tools

Prefixul local este locația din sistem pe care GCC va căuta fișierele includ instalate local. Valoarea implicită este / usr/local. Setarea acestui lucru la /instrumente ajută la păstrarea locației gazdei a / Usr / local din calea de căutare a acestui GCC.


--with-native-system-header-dir=/tools/include

În mod implicit, căutările GCC / usr / include pentru anteturile de sistem. În combinație cu comutatorul sysroot, acest lucru s-ar traduce în mod normal în $LFS/usr/include. Cu toate acestea, anteturile care vor fi instalate în următoarele două secțiuni vor merge la $LFS/instrumente/include. Acest comutator asigură că gcc le va găsi corect. În a doua trecere a GCC, același comutator se va asigura că nu sunt găsite anteturi din sistemul gazdă.

--disable-shared

Această comutare forțează GCC să-și conecteze bibliotecile interne în mod static. Facem acest lucru pentru a evita posibile probleme cu sistemul gazdă.

--disable-decimal-float, --disable-threads, --disable-libatomic, --disable- libgomp, --disable-libquadmath, --disable-libssp, --disable-libvtv, --disable-libstdcxx

Aceste comutatoare dezactivează suportul pentru extensia zecimală în virgulă mobilă, threading, libatomic, libgomp,

libquadmath, libssp, libvtv și, respectiv, biblioteca standard C++. Aceste caracteristici nu se vor compila la construirea unui compilator încrucișat și nu sunt necesare pentru sarcina de compilare încrucișată a libc-ului temporar.

--disable-multilib

Pe x86_64, LFS nu acceptă încă o configurație multilib. Acest comutator este inofensiv pentru x86.

--enable-languages=c,c++

Această opțiune asigură că numai compilatoarele C și C++ sunt construite. Acestea sunt singurele limbi necesare acum.

Compilați GCC rulând:


face

face

Compilarea este acum completă. În acest moment, suita de testare ar fi în mod normal rulată, dar, după cum am menționat anterior, cadrul suita de teste nu este încă în vigoare. Beneficiile rulării testelor în acest moment sunt minime, deoarece programele de la această primă trecere vor fi înlocuite în curând.

Instalează pachetul:


make install

make install

Top OS Cloud Computing la OnWorks: