2017-07-23 3 views
0

J'ai installé GCC 7.1 sur mon ordinateur et essayé d'utiliser g++, mais cela n'a pas fonctionné, en disant ceci:Utilisation de la version inférieure de GLIBC: la version `GLIBC_2.11` est introuvable (requise par g ++)

g++: /lib64/libc.so.6: version `GLIBC_2.11` not found (required by g++) 

alors je l'ai fait ces:

$ strings /lib64/lib.so.6 | grep GLIB 
GLIBC_2.2.5 
GLIBC_2.2.6 
GLIBC_2.3 
GLIBC_2.3.2 
GLIBC_2.3.3 
GLIBC_2.3.4 
GLIBC_2.4 
GLIBC_2.5 
GLIBC_PRIVATE 

$ strings `which g++` | grep GLIB 
GLIBC_2.3 
GLIBC_2.11 
GLIBC_2.2.5 

Deux choses peuvent être notées ici:

  • La chaîne GLIBC_2.11 n'est pas commun à ces deux sorties. Toutefois, GLIBC_2.3 est commun aux deux.

Questions:

1. Que font exactement ces chaînes signifie? Pourquoi y a-t-il plus d'une chaîne dans les deux? Que nous disent-ils?

2. Ma conjecture est que l'absence de GLIBC_2.11 dans libc explique pourquoi g++ ne fonctionne pas, comme g++ exige (comme l'erreur elle-même dit). Cependant, je suis confus qu'est-ce que la présence de GLIBC_2.3 dans les deux signifie réellement? Cela signifie-t-il que g++ peut être chargé d'utiliser ceci au lieu de GLIBC_2.11? Si oui, comment exactement? Quelle est la commande?

+0

Le gcc que vous avez installé a été construit pour un système qui fournit une glibc plus récente que ce qui est sur votre système, essayer de le faire fonctionner sur votre système n'est pas une façon amusante de passer une bonne fin de semaine. de trouver un paquet qui fonctionne sur votre système, ou construire gcc .7.1 à partir de la source sur votre système. – nos

Répondre

4

GLIBC_2.3 et GLIBC_2.11 sont des versions de symbole. L'éditeur de liens dynamiques les utilise pour effectuer une vérification rapide de la compatibilité de la bibliothèque au démarrage du programme: le système glibc doit fournir toutes les versions de symboles référencées par le programme. Votre glibc est apparemment 2.5 (ce qui correspond à Red Hat Enterprise Linux 5). Cette version manque de quelques fonctionnalités ajoutées dans les versions ultérieures, et il s'avère que le binaire GCC précompilé que vous essayez d'exécuter en a besoin. Pour résoudre ce problème, vous aurez besoin d'une version de GCC compilée spécifiquement pour Red Hat Enterprise Linux 5. Je n'ai pas essayé si les sources amont actuelles de GCC construisaient avec le compilateur système, ce qui est assez ancien à cette époque (bien qu'en amont colle toujours avec C++ 03 pour exactement de tels besoins). Certaines fonctionnalités libstdc++ peuvent également avoir besoin d'un noyau plus récent que 2.6.18, et un certain soin est nécessaire pour préserver la compatibilité entre le nouveau libstdc++ et celui installé avec le système.