sudo apt-get cài đặt libstdc ++


16

Khi tôi cố gắng cài đặt libstdc++bằng cách sử dụng:

sudo apt-get install libstdc++

Tôi nhận được lỗi dưới đây trong Ubuntu. Bạn có ý tưởng gì về nó không?

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.

Gần đây bạn đã thêm bất kỳ ppas?
Raphael

1
Thật ra không có gói nào được gọi libstdc++(có thể bạn đang cố cài đặt libstdc++6? Vì các ++ký tự, khi aptkhông tìm thấy khớp chính xác, nó xử lý tên gói như một biểu thức thông thường nên trong trường hợp này, nó đang cố cài đặt bất kỳ gói nào có tên các trận đấu được libstdtheo sau bởi một hoặc nhiều c- trong đó có nhiều xung đột, như bạn có thể thấy.
Steeldo

@steel ấn: đó rõ ràng là câu trả lời và imho nên là một câu trả lời chứ không phải là một nhận xét (mặc dù nó sẽ giúp có thể giải thích làm thế nào để tránh xử lý chuỗi như một biểu thức chính quy). Manpage cho aptnói rằng nó sẽ đối xử với tên gói như regexes nếu họ bao gồm ., ?hoặc *nếu không nhắc đến +, vì vậy hành vi là không chính xác mong đợi.
rici

Câu trả lời:


12

Thực tế không có một gói được gọi libstdc++(có thể bạn đang cố cài đặt libstdc++6?)

Khi apt không tìm thấy sự trùng khớp chính xác với tên gói, nó sẽ coi chuỗi đã cho là một biểu thức chính quy. Trong trường hợp này, ++nguyên nhân khiến nó cố gắng cài đặt bất kỳ gói nào có tên trùng khớp với libstdmột hoặc nhiều c- trong đó có nhiều xung đột, như bạn có thể thấy.

Thật không may, tôi chưa bao giờ tìm ra cách tắt hành vi này (trước đây tôi chưa từng thử sử dụng các ký tự thoát có vẻ hiệu quả) - giải pháp duy nhất tôi biết là cẩn thận đặt tên gói chính xác trong đó có bất kỳ ký tự regex nào có thể bị hiểu sai và để đảm bảo danh mục gói được cập nhật tức là

sudo apt-get update
sudo apt-get install libstdc++6

điều này nên được chấp nhận Liên quan đến việc tắt: người ta có thể viết một bí danh hoặc hàm bao bọc tên gói bên trong một^PACKAGE$
phil294

11

Đầu tiên chạy các lệnh này

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

và sau đó thử

sudo apt-get install libstdc++6

hoặc thử kết quả tìm kiếm này và cài đặt một gói mong muốn từ http://packages.ubfox.com/search?keywords=libstdc%2B%2B được liệt kê


2
+1 Câu trả lời hay, nhưng không libstdc++bao gồm trong build-essentials?
Kev Inski

7
Oh và tại sao cài đặt aptitudenếu bạn không sử dụng nó để cài đặt libstdc++6?
Kev Inski

2
Cảm ơn bạn đã trả lời Kev. Tôi đã cố gắng đưa ra một số khả năng trong trường hợp không thành công. Và năng khiếu xử lý lỗi của mình.
MAK Ripon

sudo apt-get update apt-get: lỗi trong khi tải các thư viện dùng chung: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: tiêu đề ELF không hợp lệ
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

6
Bạn có thể giải thích tại sao người dùng phải làm điều này và mỗi lệnh làm gì? (chỉ trong trường hợp người khác đọc câu trả lời của bạn và quyết định chỉ sao chép-dán nó cho vấn đề sai?) ;-)
Fabby
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.