如果我在Fedora Core 11上编译的名为“version”的可执行文件上执行以下命令,我会得到此输出
档案版
版本:ELF 32位LSB可执行文件,Intel 80386,版本1(SYSV),动态链接(使用共享库),用于GNU / Linux 2.6.18 ,未剥离
2.6.18 号码的最终意义是什么?是否可以区分客户应该下载的某些软件版本?
从我到目前为止看来,这个数字肯定不是
我想获得一些简单的标识符,以便客户知道他们应该下载哪个二进制版本,理想情况下他们应该通过键入命令来识别(如uname -a,尽管这显然不是一个在这种情况下)。
由于
答案 0 :(得分:7)
这是二进制文件编译的机器的内核版本。如果您使用分发中的预编译二进制文件,它可能是分发供应商的机器的内核版本,可能在其编译场中。
这是相关的,例如在考虑系统调用时。假设您的二进制文件使用系统调用号。 X
并且您使用的内核不支持X
但更糟糕的是已经分配了系统调用号。 X
到另一个系统调用。
vanilla Linux Kernel User API非常稳定。这意味着如果A
,Linux版本B
中提供的Linux版本A <=B
中的每个系统调用都可用。但有些开发人员可能会发布他/她自己的Linux开发版本(类似linux-2.6.18-xy
)并且他/她实现了一个新的系统调用。如果他/她现在使用该内核版本编译二进制文件,那么二进制文件将被标记为该版本。因此,您稍后可以知道它可能会起作用,也可能不起作用。
顺便说一句,/usr/include/asm/unistd_32.h
包含系统调用号,摘录:
[...]
#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
[...]