【问题标题】:How can you determine installed versions of the glibc libraries?如何确定 glibc 库的已安装版本?
【发布时间】:2011-02-12 22:21:41
【问题描述】:

我正在使用嵌入式 Linux 部署,并且正在使用不编译 I2C 库函数调用的交叉编译器工具链。

如何确定系统上库的精确版本,以便重建工具链?

我不打算替换部署的库,因为我知道它们可以工作(包括 I2C),所以我认为我需要以下内容:

  • Binutils 版本
  • GCC 版本
  • GLIBC
  • 内核(用于标头)

我想我可以从以下假设 binutils 库是 2.2.5 版。内核是经过修改的,我有源代码。

root@dev-box />ls /lib/ -al
drwxrwxrwx  3 root root     1024 Apr 27 09:44 .
drwxrwxrwx 14 root root     1024 Jan  1  1970 ..
-rwxrwxrwx  1 root root   105379 Jan  1  1970 ld-2.2.5.so
lrwxrwxrwx  1 root root       16 Jan  1  1970 ld-linux.so.2 -> /lib/ld-2.2.5.so
lrwxrwxrwx  1 root root       16 Jan  1  1970 ld.so.1 -> /lib/ld-2.2.5.so
-rwxrwxrwx  1 root root  1288601 Jan  1  1970 libc.so.6
-rwxrwxrwx  1 root root    25441 Jan  1  1970 libcrypt.so.1
-rwxrwxrwx  1 root root    14303 Jan  1  1970 libdl.so.2
-rwxrwxrwx  1 root root    36800 Jan  1  1970 libgcc_s.so.1
-rwxrwxrwx  1 root root   530401 Jan  1  1970 libm.so.6
-rwxrwxrwx  1 root root    86626 Jan  1  1970 libnsl.so.1
-rwxrwxrwx  1 root root    17533 Jan  1  1970 libnss_dns.so.2
-rwxrwxrwx  1 root root    46324 Jan  1  1970 libnss_files.so.2
-rwxrwxrwx  1 root root    98633 Jan  1  1970 libpthread.so.0
-rwxrwxrwx  1 root root    69966 Jan  1  1970 libresolv.so.2
-rwxrwxrwx  1 root root    12897 Jan  1  1970 libutil.so.1

【问题讨论】:

    标签: linux gcc gnu cross-compiling


    【解决方案1】:

    对于 glibc:

    /lib/libc.so.6

    运行 so 文件听起来可能很奇怪,但在这种情况下应该打印出版本信息

    内核版本使用uname

    对于解析 ld --version 的输出的 binutils 可能会产生您所期望的结果,gcc --version 的输出也是如此。这有点乏味,但我不知道另一种方式。

    【讨论】:

    • 因为我知道内核的版本我没有尝试uname,在我的系统上它不起作用。相反,version 给了我爱。
    • 库如何也可以是可执行文件?
    • 由于较新的多架构布局,这已经过时了。
    • @Amias 在我的 Ubuntu 18.04 安装中没有过时,尽管该库在过去 8 年中升级了几个版本。
    • 在我的 CentOS 7 安装中,locate libc.so 返回/usr/lib64/libc.so.6。 (这是指向libc-2.17.so 的符号链接。)
    【解决方案2】:

    运行可以找到更全面的答案

    find /lib -iname 'libc*.so'
    

    在最近的系统上,这会给你这样的结果,表明我在 ubuntu 18.10 上使用 glibc 2.28

    /lib/x86_64-linux-gnu/libc-2.28.so
    /lib/x86_64-linux-gnu/libcrypt-2.28.so
    /lib/i386-linux-gnu/libc-2.28.so
    /lib/i386-linux-gnu/libcrypt-2.28.so
    

    对于多架构系统,您可以有多个 386 和 64 模式的副本,我认为这些应该是相同的。

    我的系统上没有 /lib/libc.so.*。

    【讨论】:

      【解决方案3】:

      要知道当前安装的glibc版本,请编译运行以下C代码。

      #include <stdio.h>
      #include <gnu/libc-version.h>
      int main (void) { puts (gnu_get_libc_version ()); return 0; }
      

      干杯!!!

      【讨论】:

      • 在 Fedora 29 上,/lib64/libc.so.6 --version 打印出 GNU C Library (GNU libc) stable release version 2.28
      猜你喜欢
      • 2017-05-30
      • 2015-03-31
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      相关资源
      最近更新 更多