GLIBCXX 3.4.15 no Centos 6


8

Preciso instalar o GLIBCXX 3.4.15 na minha versão do Centos 6 (para executar um servidor para um jogo no Steam). Eu pesquisei e tinha vários sites onde eles instalaram programas onde o erro aparecia, onde dizia que o 3.4.15 era necessário ( LoadLibrary ERROR: /usr/lib/libstdc++.so.6: version 'GLIBCXX_3.4.15' not found), mas eles apenas usaram uma maneira de contorná-lo / não instalá-lo. Quando eu fiz strings /usr/lib/libstdc++.so.6 | grep GLIBCXX, esta foi a saída:

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

Então, como eu instalaria diretamente o GLIBCXX 3.4.15 no Centos 6?

Respostas:


7

Eu consideraria isso um hack, mas já o usei em mais ocasiões do que gostaria de admitir para resolver problemas de compatibilidade com o GLIBC, como o que você está encontrando.

O hack envolve criar um link no /usr/libqual inclui o nome da biblioteca que uma ferramenta específica deseja. O link aponta para o nome alternativo da biblioteca.

Exemplo

Digamos que eu queira criar um link para 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

Funciona da seguinte forma:

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

Verificando os resultados:

$ 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

Mas não tenho certeza se esse método funcionará, pois sua biblioteca continuará sem a string da versão GLIBCXX_3.4.15.

Se o hack for malsucedido, você provavelmente terá que morder o marcador e instalar o GLIBC em um diretório alternativo, e então substituir LD_LIBRARY_PATHou LD_PRELOADpara que a execução de apenas steam veja a biblioteca modificada.

Exemplo

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

Detalhes sobre como fazer isso são abordados um pouco mais aqui neste SO Q&A: Várias bibliotecas glibc em um único host .


@PMint - qual método funcionou para você?
Slm

Não deveria ser a segunda ls, terceira linha libstdc++.so.6.0.15 -> libstdc++.so.6.0.14?
Runium 14/11/13

@Sukminder - sim, obrigado pela captura. Fixo.
slm

2

Basicamente, a versão do pacote libstdc ++ RPM enviada pelo CentOS (4.4.7) não é recente o suficiente para o seu aplicativo. O CentOS oferece estabilidade a longo prazo, em vez das versões mais recentes e melhores, para que isso não seja completamente inesperado.

O Fedora normalmente está um pouco à frente e pode executar seu servidor sem problemas.

Como alternativa, você pode criar uma versão mais recente do libstdc ++ a partir de uma fonte mais atual. Gostaria de iniciar o arquivo CentOS SPEC no gcc SRPM, a versão mais recente do gcc.gnu.org, e refazê-los para criar meus próprios RPMs.

Porém, as atualizações das bibliotecas C eram uma boa maneira de quebrar um sistema de maneiras inesperadas ...


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.