LINUX.ORG.RU
ФорумTalks

Аналог «file version» из portable executable

 ,


0

1

У виндовых исполнимых файлов и библиотек в формате Portable Executable есть куча метаданных, например «file version». Существуют ли подобные записи для формата ELF?

Нашёл упоминания какого-то BuildID, но это хеш, который не позволяет по номеру оценить старшинство версий, и ссылки битые.

Кто-нибудь заморачивался хранить в исполнимом файле номер версии? Если да, можно ссылку на стандарт?

★★

Навскидку вспомню ничего готового, но ты вполне можешь хранить версию и вообще что угодно в .rodata, это будет работать вообще везде. Либо сделай свою секцию и храни там.

Кто-нибудь заморачивался хранить в исполнимом файле номер версии? Если да, можно ссылку на стандарт?

$(YOUR_FAVORITE_TOOL) --version обычно прямо из исполняемого файла и берёт это.

hateyoufeel ★★★★★ ()
Последнее исправление: hateyoufeel (всего исправлений: 2)

Из чего-то похожего и распостранённого на ум приходят только версии символов.

pon4ik ★★★★★ ()

А какую именно цель ты преследуешь? Проследить версию приложения, разобраться в формате эльфов, унизить онтопик?

pon4ik ★★★★★ ()
Ответ на: комментарий от pon4ik

А какую именно цель ты преследуешь?

Облегчить жизнь разработчикам и тестерам, чтобы линуксовая версия имела единообразные с виндовыми номера, чтобы было легче ориентироваться.

olegd ★★ ()
Ответ на: комментарий от olegd

Ну в linux это обычно на уровне версии пакета и на уровне аргументов командной строки все делают, для elf стандартного решения насколько я помню(когда-то делал подобный подход) и насколько почерпнул посмотрев по диагонали формат - нет.

Хорошо ли это или плохо - сложно сказать, кмк скорее хорошо. Вот то, что нет отдельного стандарта для этого функционала - это скорее плохо.

pon4ik ★★★★★ ()

<program_name>-<major>.<minor>.<patch>

Как-то так. Для либ по крайней мере стандарт. Де факто. А может и задокументировано где-то. :)

P.S. В *nix не существует понятия ресурсов файла. По этому и метаданные хранить негде.

atrus ★★★★★ ()
Последнее исправление: atrus (всего исправлений: 2)
Ответ на: комментарий от olegd

Как это решают у вас?

Решают что? Задача какая на самом деле? Если обеспечить необходимую версию той или иной программы, то в Linux это задача пакетного менеджера.

atrus ★★★★★ ()
Ответ на: комментарий от atrus

В *nix не существует понятия ресурсов файла. По этому и метаданные хранить негде.

Как хранится BuildID?

Задача какая на самом деле?

Обеспечить единообразную нумерацию билдов во всех ОС. При том, что программа может не устанавливаться локально, а запускаться с сетевой шары. И если разбивать независимо компилируемые бинарники на пакеты, то почти каждой библиотеке потребуется отдельный пакет.

olegd ★★ ()
Ответ на: комментарий от olegd

Как хранится BuildID?

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

К определяемой разработчиком версии это отношения не имеет.

При том, что программа может не устанавливаться локально, а запускаться с сетевой шары.

М... Как я предложил программа с версией и симлинк на неё.

И если разбивать независимо компилируемые бинарники на пакеты, то почти каждой библиотеке потребуется отдельный пакет.

Вы вот сейчас не поверите... :-D

P.S. Чисто технически вы можете что угодно пихнуть в секцию .comment или .note ELF файла. Но и читать эту информацию придётся самостоятельно.

atrus ★★★★★ ()
Ответ на: комментарий от atrus

BuildID храниться в заголовке, это не ресурс программы, не данные для оболочки, это техническое поле, предназначенное для отладки, формируемое компоновщиком

Можно ссылку на спецификацию? Это же может быть любая строка?

olegd ★★ ()
Ответ на: комментарий от olegd

Ссылки нет, просто когда-то давно разбирался как ELF устроен. Если помню правильно, там могут быть любые данные.
Но я не очень почему вы хотите именно BuildID. Произвольную строку можно и правда добавить в .comment.

atrus ★★★★★ ()
Ответ на: комментарий от atrus

почему вы хотите именно BuildID

Просто знаю, что он есть, что он задаётся на этапе компиляции или линковки, и что его поддерживает Free Pascal. Про другие примеры не знаю ничего.

olegd ★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)