Stații de lucru online OnWorks Linux și Windows

logo

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

<Înapoi | Cuprins | Următor>

5.10.1. Instalarea GCC

Prima noastră versiune de GCC a instalat câteva antete interne de sistem. În mod normal, unul dintre ei, limite.h, va include la rândul său sistemul corespunzător limite.h antet, în acest caz, /tools/include/limits.h. Cu toate acestea, la momentul primei versiuni a gcc /tools/include/limits.h nu a existat, așa că antetul intern pe care GCC l-a instalat este un fișier parțial, autonom și nu include caracteristicile extinse ale antetului de sistem. Acest lucru a fost adecvat pentru construirea libc-ului temporar, dar această versiune a GCC necesită acum antetul intern complet. Creați o versiune completă a antetului intern folosind o comandă care este identică cu ceea ce face sistemul de compilare GCC în circumstanțe normale:


cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \

`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h

cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \

`dirname $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h

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

Încă o dată, schimbați locația linkerului dinamic implicit al GCC pentru a-l folosi pe cel instalat /instrumente.


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

Dacă construiți pe x86_64, schimbați numele de director implicit pentru bibliotecile pe 64 de biți în „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

Ca și în prima versiune a GCC, necesită pachetele GMP, MPFR și MPC. Despachetați fișierele tar și mutați-le în numele directorului necesare:


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


Creați din nou un director de compilare separat:


mkdir -v build cd build

mkdir -v build cd build


Înainte de a începe să construiți GCC, nu uitați să anulați toate variabilele de mediu care suprascriu semnalizatoarele implicite de optimizare. Acum pregătiți GCC pentru compilare:


CC=$LFS_TGT-gcc \

CXX=$LFS_TGT-g++ \

AR=$LFS_TGT-ar \

RANLIB=$LFS_TGT-ranlib \

../configurează \

--prefix=/instrumente \

--with-local-prefix=/tools \

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

--enable-languages=c,c++ \

--disable-libstdcxx-pch \

--disable-multilib \

--disable-bootstrap \

--disable-libgomp

CC=$LFS_TGT-gcc \

CXX=$LFS_TGT-g++ \

AR=$LFS_TGT-ar \

RANLIB=$LFS_TGT-ranlib \

../configurează \

--prefix=/instrumente \

--with-local-prefix=/tools \

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

--enable-languages=c,c++ \

--disable-libstdcxx-pch \

--disable-multilib \

--disable-bootstrap \

--disable-libgomp


Semnificația noilor opțiuni de configurare:


--enable-languages=c,c++

Această opțiune asigură că atât compilatoarele C, cât și C++ sunt construite.

--disable-libstdcxx-pch

Nu construiți antetul precompilat (PCH) pentru libstdc++. Ocupă mult spațiu și nu ne folosește.

--disable-bootstrap

Pentru versiunile native ale GCC, implicit este să faceți o construcție „bootstrap”. Acest lucru nu doar compila GCC, ci îl compilează de mai multe ori. Folosește programele compilate într-o primă rundă pentru a se compila a doua oară și apoi din nou a treia oară. A doua și a treia iterație sunt comparate pentru a vă asigura că se poate reproduce perfect. Acest lucru implică, de asemenea, că a fost compilat corect. Cu toate acestea, metoda de compilare LFS ar trebui să ofere un compilator solid, fără a fi nevoie să bootstrap de fiecare dată.

Compilați pachetul:


face

face


Instalează pachetul:


make install

make install


Ca atingere finală, creați un link simbolic. Multe programe și scripturi rulează cc în loc de gcc, care este folosit pentru a menține programele generice și, prin urmare, utilizabile pe toate tipurile de sisteme UNIX în care compilatorul GNU C nu este întotdeauna instalat. Alergare cc lasă administratorului de sistem liber să decidă ce compilator C să instaleze:


ln -sv gcc /tools/bin/cc

ln -sv gcc /tools/bin/cc


imagine

Prudență

În acest moment, este imperativ să opriți și să vă asigurați că funcțiile de bază (compilarea și legarea) ale noului lanț de instrumente funcționează conform așteptărilor. Pentru a efectua o verificare a sensului, rulați următoarele comenzi:


echo 'int main(){}' > dummy.c cc dummy.c

readelf -l a.out | grep ': /tools'

echo 'int main(){}' > dummy.c cc dummy.c

readelf -l a.out | grep ': /tools'

Dacă totul funcționează corect, nu ar trebui să existe erori, iar rezultatul ultimei comenzi va fi de forma:


[Se solicită interpretul de program: /tools/lib64/ld-linux-x86-64.so.2]

[Se solicită interpretul de program: /tools/lib64/ld-linux-x86-64.so.2]

Rețineți că linkerul dinamic va fi /tools/lib/ld-linux.so.2 pentru mașinile pe 32 de biți.

Dacă rezultatul nu este afișat ca mai sus sau nu a existat deloc ieșire, atunci ceva nu este în regulă. Investigați și reveniți pe pașii pentru a afla unde este problema și remediați-o. Această problemă trebuie rezolvată înainte de a continua. Mai întâi, efectuați din nou verificarea de sănătate, folosind gcc în loc de cc. Dacă acest lucru funcționează, atunci /tools/bin/ cc lipsește linkul simbolic. Instalați linkul simbolic ca mai sus. Apoi, asigurați-vă că PATH este corect. Acest lucru poate fi verificat rulând ecou $ PATH și verificând asta /tools/bin se află în fruntea listei. Dacă PATH este greșit, ar putea însemna că nu sunteți autentificat ca utilizator lfs sau că ceva a mers prost în secțiunea 4.4, „Configurarea mediului”.

Odată ce totul este bine, curățați fișierele de testare:


rm -v dummy.c a.out

rm -v dummy.c a.out


Top OS Cloud Computing la OnWorks: