sudo apt-get install libstdc ++

16

Lorsque j'essaie d'installer en libstdc++utilisant:

sudo apt-get install libstdc++

J'obtiens l'erreur ci-dessous dans Ubuntu. En avez-vous une idée?

The following packages have unmet dependencies:
 libstdc++-4.8-doc : Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
                     Conflicts: libstdc++6-4.6-doc but 4.6.4-6ubuntu2 is to be installed
                     Conflicts: libstdc++6-4.7-doc but 4.7.3-12ubuntu1 is to be installed
 libstdc++-4.9-doc : Conflicts: libstdc++-4.8-doc but 4.8.5-2ubuntu1~14.04.1 is to be installed
                     Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
                     Conflicts: libstdc++6-4.6-doc but 4.6.4-6ubuntu2 is to be installed
                     Conflicts: libstdc++6-4.7-doc but 4.7.3-12ubuntu1 is to be installed
 libstdc++-5-doc : Conflicts: libstdc++-4.8-doc but 4.8.5-2ubuntu1~14.04.1 is to be installed
                   Conflicts: libstdc++-4.9-doc but 4.9.3-8ubuntu2~14.04 is to be installed
                   Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
                   Conflicts: libstdc++6-4.6-doc but 4.6.4-6ubuntu2 is to be installed
                   Conflicts: libstdc++6-4.7-doc but 4.7.3-12ubuntu1 is to be installed
 libstdc++6-4.6-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
 libstdc++6-4.6-doc : Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
 libstdc++6-4.7-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.6-dbg but 4.6.4-6ubuntu2 is to be installed
 libstdc++6-4.7-doc : Conflicts: libstdc++6-4.4-doc but 4.4.7-8ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.6-doc but 4.6.4-6ubuntu2 is to be installed
 libstdc++6-4.8-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.6-dbg but 4.6.4-6ubuntu2 is to be installed
                      Conflicts: libstdc++6-4.7-dbg but 4.7.3-12ubuntu1 is to be installed
 libstdc++6-4.8-dbg-armhf-cross : Conflicts: libstdc++6-4.7-dbg-armhf-cross but 4.7.3-11ubuntu1cross1.85 is to be installed
 libstdc++6-4.9-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.6-dbg but 4.6.4-6ubuntu2 is to be installed
                      Conflicts: libstdc++6-4.7-dbg but 4.7.3-12ubuntu1 is to be installed
                      Conflicts: libstdc++6-4.8-dbg but 4.8.5-2ubuntu1~14.04.1 is to be installed
 libstdc++6-5-dbg : Conflicts: libstdc++6-4.4-dbg but 4.4.7-8ubuntu1 is to be installed
                    Conflicts: libstdc++6-4.6-dbg but 4.6.4-6ubuntu2 is to be installed
                    Conflicts: libstdc++6-4.7-dbg but 4.7.3-12ubuntu1 is to be installed
                    Conflicts: libstdc++6-4.8-dbg but 4.8.5-2ubuntu1~14.04.1 is to be installed
                    Conflicts: libstdc++6-4.9-dbg but 4.9.3-8ubuntu2~14.04 is to be installed
E: Unable to correct problems, you have held broken packages.
user2856923
la source
Avez-vous récemment ajouté des ppas?
Raphael
1
Il n'y a pas réellement de package appelé libstdc++(peut-être que vous essayez d'installer libstdc++6? En raison des ++caractères, lorsqu'il aptne trouve pas de correspondance exacte, il traite le nom du package comme une expression régulière , dans ce cas, il essaie d'installer un package dont le nom matchs libstdsuivis par un ou plusieurs c- dont beaucoup sont en conflit, comme vous pouvez le voir.
steeldriver
@steeldriver: c'est clairement la réponse et à mon humble avis devrait être une réponse plutôt qu'un commentaire (bien que cela aiderait à pouvoir expliquer comment éviter de traiter la chaîne comme une expression régulière). La page de manuel pour aptindique qu'elle traitera les noms de paquet comme des expressions rationnelles s'ils incluent ., ?ou *sans mentionner +, donc le comportement n'est pas exactement prévu.
rici

Réponses:

12

Il n'y a en fait pas de package appelé libstdc++(peut-être que vous essayez d'installer libstdc++6?)

Lorsque apt ne trouve pas de correspondance exacte avec un nom de package, il traite la chaîne donnée comme une expression régulière. Dans ce cas, le ++fait essayer d'installer tout package dont le nom correspond libstdsuivi d'un ou de plusieurs c- dont plusieurs sont en conflit, comme vous pouvez le voir.

Malheureusement, je n'ai jamais réussi à comprendre comment désactiver ce comportement (rien de ce que j'ai essayé dans le passé en utilisant des caractères d'échappement ne semble fonctionner) - la seule solution que je connaisse est de faire attention à donner un nom de package exact où tous les caractères d'expression régulière pourrait être mal interprété, et pour vous assurer que le catalogue de paquets est à jour, c.-à-d.

sudo apt-get update
sudo apt-get install libstdc++6
tournevis
la source
cela devrait être accepté. Concernant l'arrêt: on pourrait écrire un alias ou une fonction qui encapsule le nom du package dans un^PACKAGE$
phil294
11

Exécutez d'abord ces commandes

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install build-essential
sudo apt-get install aptitude

puis essayez

sudo apt-get install libstdc++6

ou essayez ce résultat de recherche et installez un package souhaité à partir de http://packages.ubuntu.com/search?keywords=libstdc%2B%2B

MAK Ripon
la source
2
+1 Bonne réponse, mais n'est-ce pas libstdc++inclus dans le build-essentials?
Kev Inski
7
Oh et pourquoi installer aptitudesi vous ne l'utilisez pas pour l'installation libstdc++6?
Kev Inski
2
Merci pour votre réponse Kev. J'ai essayé de donner une sorte de possibilité en cas d'échec. Et aptitude à gérer son erreur.
MAK Ripon
sudo apt-get update apt-get: erreur lors du chargement des bibliothèques partagées: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: en-tête ELF non valide
mvladk
3
LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9
Venkat Kotra
la source
6
Pourriez-vous expliquer pourquoi l'utilisateur doit faire cela et ce que fait chaque commande? (juste au cas où quelqu'un d'autre lirait votre réponse et déciderait simplement de la copier-coller pour le mauvais problème?) ;-)
Fabby