2011-10-23 9 views
7

La domanda è relativamente semplice: come posso costruire un GCC della serie 4.x (insieme a binutils e amici) che ha come target un ABI 2.4 sulla stessa architettura dell'host per il compilatore?Costruisci il GCC moderno (4.x) per indirizzare un kernel 2.4.x sulla stessa architettura dell'host?

Il sistema host dovrebbe essere x86 o x86_64 e l'unico requisito è che i file ELF creati vengano eseguiti su un vecchio kernel purché corrispondano all'ABI. (Esistono sorgenti/intestazioni del kernel)

Una libc compatibile sarebbe necessaria per collegarsi. Tuttavia, posso anche collegarmi dinamicamente, poiché conosco la versione (g) di libc.

Qualsiasi suggerimento sarebbe molto apprezzato. Conosco un po 'lo crosstool-ng, ma sembra che non supporti più nemmeno i kernel 2.4 (per ovvi motivi).

+2

In termini tecnici, sta cercando di capire come indirizzare un ABI inferiore a quelli usati dalla maggior parte delle distribuzioni moderne, e ottenere un corrispondentemente inferiore sezione .note.ABI-tag del binario ELF. Non riesco a trovare informazioni su questo sul web da nessuna parte, quindi suppongo che questa sia una richiesta piuttosto specializzata. Forse vuoi mandare per e-mail la mailing list [email protected] –

+0

@Ken Bloom: grazie. Buona idea. In effetti non sono riuscito a trovare nessun suggerimento da solo, quindi ho pensato di chiedere qui :) – 0xC0000022L

risposta

1

Probabilmente il modo più semplice è impostare una moderna catena di strumenti su un vecchio sistema operativo.

RHEL 2.1 o 3 potrebbero essere i migliori, poiché sono stati supportati fino a poco tempo fa.

Compilare gcc 4 può essere complicato dal momento che avrete bisogno anche di librerie matematiche. Potrebbe essere necessario un approccio a più fasi.

EDIT:

Per la compilazione più recente gcc:

  1. Compile ultima make - aggiungi al PATH
  2. Estrarre gcc
  3. Disimballare MPFR, gmp, MPC nella directory di gcc
  4. link simbolico le directory versionate alla base (mpfr, gmp, mpc).
  5. Costruire e installare gcc

Qualcosa di simile a questo:

cd ~/software 
tar xjf $DOWNLOAD/gcc/gcc-core-${GCCVER}.tar.bz2 || failure "unpack gcc failed" 
tar xjf $DOWNLOAD/gcc/gcc-g++-${GCCVER}.tar.bz2 || failure "unpack g++ failed" 

cd gcc-${GCCVER} 

tar xjf $DOWNLOAD/gmp-5.0.2.tar.bz2 || failure "unpack gmp failed" 
#tar xjf $DOWNLOAD/gmp-4.3.2.tar.bz2 || failure "unpack gmp failed" 
ln -s gmp-* gmp 
tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed" 
#tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed" 
ln -s mpfr-* mpfr 
tar xzf $DOWNLOAD/mpc-0.9.tar.gz || failure "unpack mpc failed" 
ln -s mpc-* mpc 

cd .. 
mkdir gcc-build 
cd gcc-build 
../gcc-${GCCVER}/configure --prefix=/opt/tools || failure "configure failed" 
make || failure "make failed" 
make install || failure "install failed" 
+0

Purtroppo questa sembra essere l'unica opzione rimasta. – 0xC0000022L

0

Credo che probabilmente dovresti creare un cross-compiler GCC in questo caso e che dovresti compilare GLibc che gestirà la dipendenza dal vecchio kernel 2.4.

Tuttavia, hai semplicemente provato a compilare il codice e semplicemente collegarlo alla vecchia libreria Glibc compatibile con kernel 2.4? Suppongo che dovrebbe funzionare.

E hai provato a eseguire il tuo binario (ottenuto in modo semplice su un sistema recente che utilizza il suo recente GCC) sul vecchio sistema? Cosa non funziona come previsto?

Saluti.

+0

Il binario costruito, quando avviato, genera un errore che il kernel è troppo vecchio. O piuttosto il caricatore lo farà. – 0xC0000022L

Problemi correlati