Làm cách nào để tìm phiên bản libc mà ứng dụng của tôi liên kết đến?


14

Khi xây dựng một ứng dụng bằng g ++, tôi không rõ ràng chuyển thư viện libc làm thư viện để liên kết theo cùng cách bạn làm với các thư viện khác ( -lpthreadví dụ như chuyển qua ). Tôi biết rằng libc có tên như vậy libc.so.6nhưng tôi biết rằng đây thực sự không phải là một thư viện mà là một cái gì đó giống như một con trỏ đến một phiên bản khác của libc (chẳng hạn như libc-2.15.so). Câu hỏi của tôi là nếu tôi có nhiều phiên bản libc trên máy tính của mình, làm thế nào tôi có thể biết phiên bản nào thực sự được liên kết thông qua libc.so.6.

Câu trả lời:


16

lddnên là công cụ của sự lựa chọn của bạn. Điều đó cung cấp cho bạn thư viện chia sẻ thực sự liên kết.

confus@confusion:~/misc/test$ ldd -r -v testendian
    linux-vdso.so.1 =>  (0x00007fffbcfff000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1a5a4c5000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1a5a8a5000)

    Version information:
    ./testendian:
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
    /lib/x86_64-linux-gnu/libc.so.6:
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-x86-64.so.2
        ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => /lib64/ld-linux-x86-64.so.2

Trong trường hợp libc, bạn chỉ cần chạy .sotệp và sẽ được thông báo phiên bản thư viện.

confus@confusion:~/misc/test$ /lib/x86_64-linux-gnu/libc.so.6 
GNU C Library (Ubuntu EGLIBC 2.15-0ubuntu10) stable release version 2.15, by Roland McGrath et al.

Tôi đã biết về ldd, không biết bạn chỉ có thể điều hành một thư viện - cảm ơn. Thật không may, đầu ra của tôi từ việc chạy thư viện không hiển thị phiên bản ....
nhà toán

Bỏ qua việc tôi là một thằng ngốc - cảm ơn vì câu trả lời!
nhà toán

1
Cảm ơn câu trả lời. Bạn có thể cung cấp một số thông tin những gì đầu ra ldd cho tôi biết? Có nghĩa là testendianyêu cầu GLIBC_2.3 hoặc GLIBC_2.2.5?
bonanza

Tôi khá chắc chắn, điều đó có nghĩa là chương trình cần GLIBC 2.2.5 và trình tải thư viện ld-linux-x86-64 đã được xây dựng với GLIBC_2.3. Vì vậy, cả hai theo một cách. Nhưng hãy dùng nó với một hạt muối, vì tôi không tìm thấy tài liệu tham khảo.
con-f-sử dụng

Hoạt động tuyệt vời cho các thực thi động, nhưng không nhiều cho các tĩnh! (Tôi cần kiểm tra những gì tôi đang liên kết với các cảnh báo của gcc warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking:)
jpaugh
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.