sudo apt-get install libstdc ++

16

Kiedy próbuję zainstalować, libstdc++używając:

sudo apt-get install libstdc++

Otrzymuję poniższy błąd w Ubuntu. Czy masz jakiś pomysł na ten temat?

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.
użytkownik2856923
źródło
Czy ostatnio dodałeś jakieś ppas?
Raphael
1
W rzeczywistości nie ma pakietu o nazwie libstdc++(być może próbujesz zainstalować libstdc++6? Z powodu ++znaków, gdy aptnie znajduje dokładnego dopasowania, traktuje nazwę pakietu jako wyrażenie regularne, więc w tym przypadku próbuje zainstalować dowolny pakiet, którego nazwa mecze, libstdpo których następuje jeden lub więcej c- z których wiele jest sprzecznych, jak widać
steeldriver
@steeldriver: to jest oczywiście odpowiedź, a imho powinno być odpowiedzią, a nie komentarzem (chociaż pomogłoby to w wyjaśnieniu, jak unikać traktowania łańcucha jako wyrażenia regularnego). Manpage dla aptmówi, że będzie traktować jako nazwy pakietów regexes jeśli obejmują one ., ?lub *nie wspominając +, więc nie jest dokładnie spodziewane zachowanie.
rici

Odpowiedzi:

12

W rzeczywistości nie ma pakietu o nazwie libstdc++(być może próbujesz zainstalować libstdc++6?)

Gdy apt nie znajdzie dokładnego dopasowania do nazwy pakietu, traktuje podany ciąg jako wyrażenie regularne. W tym przypadku ++powoduje to próbę zainstalowania dowolnego pakietu, którego nazwa pasuje libstddo jednego lub więcej c- z których wiele powoduje konflikt, jak widać.

Niestety, nigdy nie udało mi się wymyślić, jak wyłączyć to zachowanie (wydaje się, że nic, co próbowałem w przeszłości przy użyciu znaków specjalnych, nie działało) - jedynym rozwiązaniem, jakie znam, jest ostrożne podawanie dokładnej nazwy pakietu w miejscu, w którym występują dowolne znaki regularne może zostać źle zinterpretowany i mieć pewność, że katalog pakietów jest aktualny, tj

sudo apt-get update
sudo apt-get install libstdc++6
steeldriver
źródło
należy to zaakceptować. Odnośnie wyłączenia: można napisać alias lub funkcję, która zawija nazwę pakietu w^PACKAGE$
phil294
11

Najpierw uruchom te polecenia

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

a następnie spróbuj

sudo apt-get install libstdc++6

lub wypróbuj ten wynik wyszukiwania i zainstaluj jeden żądany pakiet z wymienionych http://packages.ubuntu.com/search?ke words=libstdc%2B%2B

MAK Ripon
źródło
2
+1 Dobra odpowiedź, ale czy nie jest libstdc++uwzględniona w build-essentials?
Kev Inski
7
Aha i dlaczego instalujesz, aptitudejeśli nie używasz go do instalacji libstdc++6?
Kev Inski
2
Dziękuję za odpowiedź Kev. Próbowałem dać jakieś możliwości w przypadku niepowodzenia. I umiejętności radzenia sobie z jego błędem.
MAK Ripon
sudo apt-get update apt-get: błąd podczas ładowania bibliotek współdzielonych: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: nieprawidłowy nagłówek ELF
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
źródło
6
Czy możesz wyjaśnić, dlaczego użytkownik musi to zrobić i co robi każde polecenie? (na wypadek, gdyby ktoś inny przeczytał twoją odpowiedź i zdecydował się po prostu skopiować i wkleić ją z powodu niewłaściwego problemu?) ;-)
Fabby