GLIBCXX 3.4.15 su Centos 6


8

Devo installare GLIBCXX 3.4.15 sulla mia versione di Centos 6 (per eseguire un server per un gioco su Steam). Ho cercato su Google e ho avuto diversi siti Web in cui hanno installato programmi in cui è apparso l'errore in cui si diceva che era necessario 3.4.15 ( LoadLibrary ERROR: /usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found), ma hanno solo usato un modo per bypassarlo / non installarlo. Quando l'ho fatto strings /usr/lib/libstdc++.so.6 | grep GLIBCXX, questo è stato l'output:

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

Quindi, come installerei direttamente GLIBCXX 3.4.15 su Centos 6?

Risposte:


7

Considererei questo un trucco, ma l'ho usato in più occasioni di quanto non voglia ammettere di aggirare i problemi di compatibilità con GLIBC, come quello che stai riscontrando.

L'hacking prevede la creazione di un collegamento in /usr/libcui sia incluso il nome della libreria desiderato da un determinato strumento. Il collegamento quindi punta a un nome alternativo della libreria.

Esempio

Supponiamo di voler creare un collegamento a libstdc++.so.6.

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Risulta essere qualcosa del genere:

$ ln -s libstdc++.so.6 libstdc++.so.6.0.15

Verifica dei risultati:

$ ls -l /usr/lib | grep libstdc++.so
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6 -> libstdc++.so.6.0.14
lrwxrwxrwx.  1 root root       19 Dec 18  2010 libstdc++.so.6.0.15 -> libstdc++.so.6.0.14
-rwxr-xr-x   1 root root   950428 Sep 24  2010 libstdc++.so.6.0.14

Ma non sono sicuro che questo metodo funziona visto che sei biblioteca sarà ancora mancare la stringa della versione, GLIBCXX_3.4.15.

Se l'hacking non ha esito positivo, probabilmente dovrai mordere il proiettile e installare GLIBC in una directory alternativa, quindi eseguire l'override LD_LIBRARY_PATHo in LD_PRELOADmodo che l'esecuzione di solo Steam visualizzi la libreria modificata.

Esempio

$ LD_PRELOAD='mylibc.so anotherlib.so' program

I dettagli su come fare questo sono trattati un po 'di più qui in questo SO Domande e risposte : Più librerie glibc su un singolo host .


@PMint - quale metodo ha funzionato per te?
slm

La seconda ls, terza riga non dovrebbe essere libstdc++.so.6.0.15 -> libstdc++.so.6.0.14?
Runium,

@Sukminder - sì, grazie per la cattura. Fisso.
slm

2

Fondamentalmente la versione del pacchetto RPM libstdc ++ fornita da CentOS (4.4.7) non è abbastanza recente per la tua applicazione. CentOS offre stabilità a lungo termine invece delle versioni più recenti e più grandi, quindi non è del tutto inaspettato.

Fedora è normalmente un po 'avanti e può eseguire il tuo server senza problemi.

In alternativa, potresti creare una versione più recente di libstdc ++ da una fonte più attuale. Vorrei iniziare il file SPEC di CentOS in SRPM gcc, l'ultima versione di gcc.gnu.org e rielaborare quelli per creare i miei RPM.

Gli aggiornamenti delle librerie C erano in passato un buon modo per rompere un sistema in modi inaspettati sebbene ...


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.