Скомпилированный исполняемый файл

Скомпилированный исполняемый файл

Если, например, я скомпилировал простую программу на языке C, использующую GTK 3, на машине под управлением Ubuntu, смогу ли я запустить ее на других версиях Linux?

Примечание: Мой фактический вопрос: «Следует ли мне маркировать скомпилированную программу как Linux или просто Ubuntu?»

например, следует ли мне обозначить страницу загрузок как

Windows
    program.exe

Linux
    program

Macintosh
    program.app

или

Windows
    program.exe

Ubuntu < Version 17.04
    program

Macintosh
    program.app

решение1

Исполняемые файлы Linux не являются специфическими для дистрибутива Linux. Но они являются специфическими для архитектуры процессора и набора версий библиотек.

Исполняемый файл длялюбойОперационная система специфична для архитектуры процессора. Пользователям Windows и Mac это не так важно, поскольку эти операционные системы в основном работают только на одной архитектуре. (OSX раньше работала на нескольких архитектурах процессоров, и приложения OSX обычно распространялись как пакет, содержащий код для всех поддерживаемых архитектур процессоров, но современная OSX работает только на процессорах amd64. Windows работает как на 32-разрядных, так и на 64-разрядных процессорах Intel, поэтому вы можете найти исполняемые файлы Windows «32-разрядных» и «64-разрядных».)

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

Поэтому вам следует пометить свой исполняемый файл как «Linux, 64-разрядный ПК (amd64), скомпилированный для Ubuntu 17.04» (или «32-разрядный ПК (i386)», если это 32-разрядный исполняемый файл) и указать подробную информацию о требуемых библиотеках. Вы можете увидеть библиотеки, используемые исполняемым файлом, с помощью команды ldd: run ldd program. Часть перед =>имеет значение, например, libgtk-3.so.0это основная библиотека GTK3 с версией 0 (если бы когда-либо существовала версия 1, она была бы несовместима с версией 0, вот почему нужно изменить номер версии). Некоторые из этих библиотек — это то, что в любом случае есть у всех, потому что они не менялись много лет; только опыт или сравнение путем просмотра нескольких дистрибутивов и нескольких выпусков может сказать вам это. Пользователи других дистрибутивов могут запустить тот же двоичный файл, если у них есть совместимые версии библиотек.

Связанный контент