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


14

g ++を使用してアプリケーションを構築する場合、他のライブラリと同じ方法で(-lpthreadたとえば、渡すなど)リンクするライブラリとしてlibcライブラリを明示的に渡しません。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の出力が示す情報を提供できますか?それtestendianはGLIBC_2.3またはGLIBC_2.2.5 を必要とすることを意味しますか?
ボナンザ

確かに、プログラムにはGLIBC 2.2.5が必要であり、ライブラリローダーld-linux-x86-64 はGLIBC_2.3でビルドされたことを意味します。両方の方法で。しかし、私は参考文献を見つけられなかったので、一粒の塩でそれを取る。
CON-F-使用

動的な実行可能ファイルには適していますが、静的な実行可能ファイルにはあま​​り適していません!(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.