我正在使用嵌入式 Linux 部署,并使用不编译 I2C 库函数调用的交叉编译器工具链。
如何确定系统上库的精确版本,以便我可以重建工具链?
我不打算替换部署的库,因为我知道它们可以工作(包括 I2C),所以我相信我需要以下内容:
我想我可以从下面假设 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
对于 glibc:
/lib/libc.so.6
运行 so 文件听起来可能很奇怪,但在这种情况下应该打印出版本信息
对于内核版本使用
uname
对于解析
ld --version
输出的 binutils 可能会产生您所期望的结果,对于 gcc --version
也是如此。这有点乏味,但我不知道其他方法。
要了解当前安装的glibc版本,请编译并运行以下C代码。
#include <stdio.h>
#include <gnu/libc-version.h>
int main (void) { puts (gnu_get_libc_version ()); return 0; }
干杯!!!
通过运行可以找到更全面的答案
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.* 。
$ ldd --version
ldd (GNU libc) 2.39