C
我的系統使用什麼 C 庫版本?
如何確定我的系統使用的是什麼使用者態 C 庫?需要此資訊的可能原因包括:
GNU/Linux 系統通常使用 glibc(Fedora/Redhat 家族,Arch)或其近親 eglibc(Debian/Ubuntu 家族);由於 eglibc 現在被合併回 glibc(請參閱在“新聞”下創建的 EGLIBC 2.19 分支),在不久的將來它們都將再次成為 glibc。
檢查確切版本的最簡單方法是詢問
ldd
,它隨 C 庫一起提供。在 Fedora 20 上:
> ldd --version ldd (GNU libc) 2.18
那是 glibc 2.18。
在 Raspbian(ARMv6 Broadcom SoC 的 Debian 7 埠)上:
> ldd --version ldd (Debian EGLIBC 2.13-38+rpi2) 2.13
那是eglibc 2.13。
如果您出於某種原因混合併匹配了某些部分或不確定
ldd
,您可以直接查詢 C 庫。> whereis libc.so libc: /usr/lib64/libc.a /usr/lib64/libc.so /usr/share/man/man7/libc.7.gz
這些都不是可執行的,但它們提供了在哪裡可以找到的線索。
> $(find /usr/lib64/ -executable -name "*libc.so*") --version GNU C Library (GNU libc) stable release version 2.18, by Roland McGrath et al.
然而,這並不一定那麼容易,因為 C 庫不必駐留在某個
whereis
可以找到它的地方。> whereis libc.so libc: /usr/share/man/man7/libc.7.gz
不幸的是,手冊頁沒有提供版本號。
ldd
仍然派上用場,因為系統上任何工作的、動態連結的執行檔(例如 中的幾乎所有內容/usr/bin
)都將連結到 C 庫。> ldd /usr/bin/touch /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6eed000) librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xb6ed0000) libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6da1000) /lib/ld-linux-armhf.so.3 (0xb6efb000) libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6d82000)
libc.so.6
在第三行。> /lib/arm-linux-gnueabihf/libc.so.6 --version GNU C Library (Debian EGLIBC 2.13-38+rpi2) stable release version 2.13, by Roland McGrath et al.