2010-05-04 3 views
5

Posso installare una versione precedente di gcc/g ++ (4.1.3) sull'ultimo Ubuntu (fornito con 4.4.3) e usarlo per compilare un file .so che dovrebbe essere eseguito su CentOS? Il file binario compilato con la versione di gcc di Ubuntu non riesce a caricare su CentOS a causa di importazioni mancanti (GLIB_2_11, ...). Ho bisogno del C++ (comprese le eccezioni), quindi non posso solo collegare staticamente contro glibc, che ho già provato.Compilare per CentOS su Ubuntu

Posso installare il precedente gcc senza rimuovere quello più recente? Come faccio a conoscere le librerie richieste dal vecchio gcc?

Attualmente sto sviluppando il codice in CentOS, ma è così doloroso da usare. Voglio davvero passare a un desktop di Ubuntu.

+0

Cosa c'è che non va nello sviluppo su un desktop di Ubuntu e costruire i binari finali (e build di integrazione occasionali) su una macchina CentOS (forse anche all'interno di una macchina virtuale). –

+0

Uso già le macchine virtuali. Al momento, CentOS VM si avvia in 5 minuti e una macchina virtuale è già sufficiente per un laptop da 4 GB. – Meh

+0

Prova a disabilitare SELinux, se non lo hai già fatto. Ho visto che causa un eccessivo rallentamento all'interno di VM. –

risposta

5

g ++ - 4.1 is available per Ubuntu; è sufficiente eseguire apt-get install g++-4.1 quindi eseguire g++-4.1 anziché g++. Tuttavia, l'utilizzo di un compilatore meno recente potrebbe non risolvere tutti i problemi della libreria.

Come ha detto Joachim Sauer, la soluzione migliore è eseguire il tuo sviluppo su Ubuntu, quindi eseguire la compilazione finale su CentOS.

Anche se si utilizza C++, il collegamento statico dovrebbe comunque essere un'opzione. (Tuttavia, si sta molto meglio la compilazione su CentOS e l'utilizzo di collegamento dinamico.)

Edit: Una macchina virtuale è il modo più semplice per costruire su CentOS, ma se si vuole evitare la memoria e CPU in testa di eseguire una VM e non si preoccupano delle differenze tra il kernel di Ubuntu e CentOS, quindi è possibile creare una sottodirectory contenente un file system CentOS o Fedora e chroot lo fa per creare le proprie build. This blog posting ha dettagli.

+1

Apparentemente il collegamento statico con libstdC++ su Linux è più complicato di quanto sembrerebbe: http://www.trilithium.com/johan/2005/06/static-libstdc/ – Meh