Điểm:1

libstdC++.so.6 đang liên kết đến phiên bản sai

lá cờ vn

Trước đây, sự thiếu hiểu biết của tôi đã khiến tôi loay hoay với phiên bản gcc/g++. Hiện tại, tôi đang sử dụng Ubuntu 18.04 và chạy gcc --version đã cho tôi cái này:

gcc (Ubuntu 8.4.0-1ubuntu1~18.04) 8.4.0
Bản quyền (C) 2018 Tổ chức phần mềm miễn phí, Inc.
Đây là phần mềm miễn phí; xem nguồn để biết điều kiện sao chép. Không có
sự bảo đảm; thậm chí không vì KHẢ NĂNG BÁN ĐƯỢC hoặc SỰ PHÙ HỢP CHO MỘT MỤC ĐÍCH CỤ THỂ.

Tuy nhiên, sau khi gỡ lỗi, tôi nhận ra rằng libstdC++.so.6 của mình đang liên kết với phiên bản sai. Tôi biết về điều này bằng cách chạy ls -l /usr/lib/x86_64-linux-gnu/libstdc++.so.6, đã cho tôi:

lrwxrwxrwx 1 root root 19 May 19 2020 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 -> libstdc++.so.6.0.28

Kiểm tra chống lại ABI, có vẻ như nó đến từ gcc 9.3.0 mà tôi nhớ đã cài đặt tại một thời điểm. Điều này đã gây ra cho tôi một số lỗi lạ khi lập trình C++.

Bây giờ, tôi muốn liên kết libstdC++.so.6 trở lại gcc 8 nhưng tôi không chắc đâu là cách ít ngu ngốc hơn để thực hiện việc này. Tôi có nên thử gỡ GCC 9 và cài đặt lại GCC 8 không?

Đang chạy xác định vị trí libstdc++.so.6 đã cho tôi cái này:

/opt/nvidia/nsight-systems/2020.3.2/host-linux-x64/libstdc++.so.6
/opt/nvidia/nsight-systems/2020.3.2/target-linux-armv8/host-linux-armv8/libstdc++.so.6
/snap/core18/1988/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/snap/core18/1988/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
/snap/core18/1988/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25-gdb.py
/snap/core18/2066/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/snap/core18/2066/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
/snap/core18/2066/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25-gdb.py
/usr/lib/i386-linux-gnu/libstdc++.so.6
/usr/lib/i386-linux-gnu/libstdc++.so.6.0.28
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
/usr/share/gdb/auto-load/usr/lib/i386-linux-gnu/libstdc++.so.6.0.28-gdb.py
/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28-gdb.py
lá cờ hr
AFAIK, `libstdc++6.0.xx` không liên quan đến một phiên bản gcc cụ thể - nó là một phần của gói `libstdc++6` độc lập. Bạn đang cố gắng giải quyết (những) vấn đề thực tế nào?
Anh Tran avatar
lá cờ vn
@steeldriver Có vẻ như các tệp nhị phân của tôi đang liên kết với libary được chia sẻ sai (libstdc++.so.6) khiến chương trình bị sập (lỗi seg)
lá cờ cn
Ray
Điều gì sẽ xảy ra nếu bạn thử xóa gói chứa `libstdc++6.0.28` và sau đó cài đặt gói mà bạn muốn? Đó là, bỏ qua vấn đề gcc 8 hoặc 9.
Anh Tran avatar
lá cờ vn
Tôi nên làm gì để tìm ra gói nào phụ thuộc vào libstdC++6.0.28?
N0rbert avatar
lá cờ zw
Vui lòng thêm đầu ra của `dpkg -S libstdc++.so.6` và `apt-cache policy $(dpkg -S libstdc++.so.6 | awk -F: '{print $1}' | sort -u)` vào câu hỏi.
lá cờ hr
Tôi thực sự nghĩ rằng bạn nên thực hiện thêm một số sửa lỗi về (các) nguyên nhân của lỗi phân tách trước khi đi xuống hố thỏ này - AFAIK libstdC++ luôn cung cấp khả năng tương thích * lạc hậu * ABI cũ. trên hộp 18.04 của tôi (nơi tôi có libstdc++6.0.29.so), nó cung cấp ABI CXX từ 1.3.1 (gcc 4.?) đến 1.3.13 (gcc 11.1), như được biểu thị bằng đầu ra của `nm -D /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.29 | grep CXXABI`

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.