CentOS 5.8 com gcc 4.4.7 links contra libstdc ++ 6.0.8. Como isso é possível?

4

De acordo com a política ABI do gcc , o gcc 4.4.7 deve depender do libstdc ++ 6.0. 13 Tanto quanto eu entendi, a versão do compilador e a versão libstdc ++ estão profundamente inter-relacionadas e não podem ser trocadas, então me ocorreu uma surpresa descobrir os seguintes fatos:

  • O CentOS 5.8 de alguma forma consegue ter um pacote gcc44 que se liga ao 6.0.8, aparentemente vindo com o sistema padrão (que é baseado no gcc-4.1.2)
  • que o libstdc ++. so no diretório do compilador (/usr/lib/gcc/x86_64-redhat-linux6E/4.4.7, onde eu esperava encontrar um libstdc ++ - 6.0.13) não é um link para um objeto compartilhado de qualquer tipo, mas um arquivo de texto contendo INPUT ( -lstdc++_nonshared /usr/lib64/libstdc++.so.6 )

Que tipo de mágica está acontecendo aqui?

Especificamente:

  • Como eles poderiam fornecer um gcc 4.4.7 com links para uma versão mais antiga do libstdc ++? Eu pensei que não era possível.
  • o que é essa biblioteca stdc ++ _ não compartilhada?
  • Eu não sabia que um arquivo .so poderia conter esse texto. Quem analisa (linker dinâmico eu acho) e quais são suas especificações e conseqüências?
  • Até onde essa magia pode ir? Posso usar o gcc4.7 com o libstdc ++ 6.0.3? Qual é o espectro de compatibilidade
por Stefano Borini 31.05.2013 / 19:08

1 resposta

3

Se eu fizer um rpm -q --requires gcc44 , vejo o seguinte:

libstdc++.so.6()(64bit)
libstdc++.so.6(CXXABI_1.3)(64bit)
libstdc++.so.6(GLIBCXX_3.4)(64bit)

Portanto, não há dependência de versão explícita para 6.0.13 no rpm itselv.

Como você encontrou, o libstdc ++. so.6 pertence ao libstdc ++ - 4.1.2-53.el5

Esta versão 4.1.2 não tem significado real no RedHat - também conterá backports para versões mais recentes.

Veja isto: rpm -q libstdc++ --changelog|more :

* Fri Mar 23 2012 Jakub Jelinek <[email protected]> 4.1.2-53.el5
- backport N2179 exception propagation support to improve
  gcc44 as well as Developer Toolset (#806275)

Então, obviamente, o RedHat está remendando ativamente esta versão para que seja compatível com o gcc44.

    
por 05.06.2013 / 15:20

Tags