내 응용 프로그램이 어떤 버전의 libc에 링크되어 있는지 어떻게 알 수 있습니까?


14

g ++을 사용하여 응용 프로그램을 빌드 할 때 다른 라이브러리와 같은 방식으로 링크하기 위해 libc 라이브러리를 라이브러리로 명시 적으로 전달하지 않습니다 (예 : 전달 -lpthread). 나는 libc가 그렇게 이름 libc.so.6이 있다는 것을 알고 있지만 이것이 실제로 라이브러리가 아니라 다른 버전의 libc에 대한 포인터와 같은 것임을 알고 있습니다 (예 :) libc-2.15.so. 내 질문은 내 컴퓨터에 여러 버전의 libc가있는 경우 실제로 어느 버전이를 통해 연결되는지 알 수 있습니까 libc.so.6?

답변:


16

ldd선택한 도구 여야합니다. 그러면 실제로 연결된 공유 라이브러리가 제공됩니다.

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

libc의 경우 .so파일을 간단히 실행 하면 라이브러리 버전을 알 수 있습니다.

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.

나는 ldd에 대해 알았지 만 라이브러리를 실행할 수 있다는 것을 몰랐습니다. 감사합니다. 불행히도 라이브러리를 실행 한 결과에 버전이 표시되지 않습니다 ....
mathematician1975

내가 바보가 된 것을 무시하십시오-답변 주셔서 감사합니다!
수학자

1
답변 해주셔서 감사합니다. ldd 출력이 알려주는 정보를 제공 할 수 있습니까? testendianGLIBC_2.3 또는 GLIBC_2.2.5 가 필요하다는 의미 입니까?
bonanza

나는 확실히 프로그램에 GLIBC 2.2.5가 필요하고 라이브러리 로더 ld-linux-x86-64 가 GLIBC_2.3으로 빌드 되었다는 것을 의미한다고 확신합니다. 두 가지 방법으로. 그러나 나는 참조를 찾지 못했기 때문에 소금 한 알로 그것을 가져 가라.
con-f-use

동적 실행 파일에는 효과적이지만 정적 파일에는 그다지 효과적이지 않습니다! (gcc 경고로 인해 연결되는 내용을 테스트해야합니다. warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking)
jpaugh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.