web-dev-qa-db-ja.com

アプリケーションがリンクしているlibcのバージョンを確認するにはどうすればよいですか?

G ++を使用してアプリケーションを構築する場合、他のライブラリと同じ方法でリンクするライブラリとしてlibcライブラリを明示的に渡しません(たとえば、-lpthreadを渡すなど)。 libcの名前はlibc.so.6であることがわかっていますが、これは実際にはライブラリではなく、libcの別のバージョンへのポインタ(libc-2.15.soなど)のようなものであることを認識しています。私の質問は、コンピューターにlibcの複数のバージョンがあった場合、どのバージョンがlibc.so.6を介して実際にリンクされているかをどのように確認できるかです。

14

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.
16
con-f-use