2010-01-25 3 views
6

Если я следующую команду на мой исполняемый файл под названием «версия», составленную на Fedora Core 11, я получаю этот выходЧто такое поле номера версии в выводе команды Linux File

версию файла

версия: ELF 32-битный LSB исполняемым, Intel 80386, версия 1 (SYSV), динамически связаны (использует общие LIBS), для GNU/Linux 2.6.18, не раздели

Что значение 2.6 .18 номер к концу, и это любое использование в этом отличая клиентов, какую версию какого-то программного обеспечения они должны скачать?

Из того, что я смотрел до сих пор, это число, безусловно, не

  1. Версия ядра
  2. Libc версия
  3. Все, что делать с lsb_release

I 'd хотел бы получить простой идентификатор, чтобы позволить клиентам узнать, какую двоичную версию они должны скачать, что они в идеале должны были бы идентифицировать, набрав команду (например, uname -a, хотя это очевидно а не в этом случае).

Благодаря

ответ

7

Это версия ядра машины двоичная был составлен на. Если вы используете предварительно скомпилированные двоичные файлы из своего дистрибутива, это версия ядра машины поставщика распространения, возможно, в ее компилируемой ферме.

Это актуально, например, при рассмотрении системных вызовов. Скажем, ваш двоичный файл использует syscall no. X, и вы используете ядро, которое не поддерживает X еще или хуже присвоено значение syscall no. X в другой системный вызов.

Пользовательский API-интерфейс Vanilla Linux Kernel является стабильным. Это означает, что каждый сценарий, доступный в версии Linux A, доступен в версии Linux B, если A <=B. Но может случиться так, что какой-то разработчик выпустит свою собственную версию Linux (что-то вроде linux-2.6.18-xy), и он/она реализует новый syscall. Если s/he теперь компилирует двоичный файл с использованием этой версии ядра, двоичный файл будет помечен этой версией. Таким образом, вы позже можете узнать, что он может работать или не работать.

Btw, /usr/include/asm/unistd_32.h содержит номер SYSCALL, Выдержка:

[...] 
#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 
[...] 
+0

Благодарности - так эффективна, минимальную версию ядра, которая имеет бинарную совместимость с исполняемым файлом? Сначала я отказался от версии ядра, поскольку программа для пользовательского пространства «зависит» (например, вывод ldd) на libc.so, но я вижу ссылку там. –

+0

Можно так сказать. Реальная правда немного более тонкая: не каждая версия ядра приносит новые syscalls, а в обычных программах вы используете обходчики syscall из libc. Таким образом, цифры не жестко закодированы в самой программе, а в libc. Но если ядро ​​придумало новый syscall, ваша программа зависит от него, вы не сможете выполнить эту программу на более старом ядре ... –

+0

Да - это то, о чем я думал - в качестве пользовательской программы мне все равно, Ядро - только libc. Но, конечно же, libc должен заботиться о ядре, поскольку он мостирует пространство пользователя с ядром.Итак, действительно, число - это версия ядра, с которой был скомпилирован libc, который исходит от поставщика (Fedora в этом случае). Спасибо за ваше время –