내 응용 프로그램이 어떤 버전의 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.