2010-05-04 9 views
8

Sto tentando di creare un pacchetto binario che può essere eseguito su più distribuzioni Linux. E 'attualmente costruito su Ubuntu 10.04, ma non riesce su Ubuntu 8.04 con il seguente errore:Qual è il modo migliore per creare software che non richieda il più recente glibc?

./test: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./test) 
./test: /usr/lib/libstdc.so.6: version `GLIBC_2.11' not found (required by ./test) 

Qual è il modo migliore per risolvere questo problema? C'è un modo per installare un vecchio glibc su una nuova scatola e costruire contro di esso, o devo costruire su una vecchia distribuzione? E se costruisco contro un vecchio glibc, funzionerà su un nuovo glibc?

Oppure, in alternativa, ci sono solo alcuni comodi flag di compilazione o pacchetti che posso installare per risolvere il problema?

risposta

5

La soluzione migliore che ho trovato è quella di installare una macchina virtuale su cui è in esecuzione Debian stable e costruire su quello. La stable di Debian è abbastanza vecchia che qualsiasi pacchetto creato con esso verrà eseguito su qualsiasi altra distribuzione basata su Debian come Ubuntu. Potrebbe essere necessario aggirare bug non critici che sono stati corretti nelle versioni successive di vari software ma non sono stati ripristinati in Debian stable.

+0

Suppongo che questo significhi che costruire su una versione antica di glibc funzionerà ancora bene sulle versioni più recenti di glibc? – ZorbaTHut

+0

Per quanto ne so, sì ... lasciatemelo dire così, non è ancora andato storto. ;-) – ptomato

1

Se si vuole veramente essere sicuri che venga eseguito su tutte le distribuzioni recenti, si potrebbe anche considerare il collegamento statico con una libC selezionata. Tuttavia, è possibile che si verifichino ancora problemi se si utilizzano funzionalità fornite solo dai nuovi kernel (nuove chiamate di sistema, ad esempio).

Problemi correlati