Исполняемые файлы Linux не являются специфичными для дистрибутива Linux. Но они специфичны для архитектуры процессора и набора версий библиотек.
Исполняемый файл для любой операционной системы специфичен для архитектуры процессора. Пользователям Windows и Mac это не так важно, потому что эти операционные системы более или менее работают только на одной архитектуре. (OSX раньше работала на нескольких процессорных архитектурах, и приложения OSX обычно распространялись в виде пакета, содержащего код для всех поддерживаемых процессорных архитектур, но современная OSX работает только на процессорах amd64. Windows работает как на 32-битных, так и на 64-битных процессорах Intel, поэтому вы можете встретить "32-битные" и "64-битные" исполняемые файлы Windows.)
Windows решает проблему зависимости библиотек, заставляя программистов комплектовать все библиотеки, которые они используют в своей программе. В Linux это делается редко, что дает программистам преимущество в том, что им не нужно связывать библиотеки, а пользователи получают своевременные обновления безопасности и исправления ошибок для библиотек, но издержки в том, что программы должны быть скомпилированы по-разному для разных выпусков дистрибутивов.
Поэтому вы должны пометить свой двоичный файл как "Linux, 64-битный ПК (amd64), скомпилированный для Ubuntu 17.04" (или "32-битный ПК (i386)", если это 32-битный исполняемый файл), и подробно описать необходимые библиотеки. Библиотеки, используемые исполняемым файлом, можно посмотреть с помощью команды ldd
: выполните ldd program
. Часть перед =>
имеет значение, например, libgtk-3.so.0
- это основная библиотека GTK3 с версией 0 (если когда-нибудь появится версия 1, она будет несовместима с версией 0, это и является причиной изменения номера версии). Некоторые из этих библиотек - это то, что все равно будет у всех, потому что они не менялись много лет; только опыт или сравнение с помощью нескольких дистрибутивов и нескольких релизов может сказать вам об этом. Пользователи других дистрибутивов могут запускать тот же двоичный файл, если у них есть совместимые версии библиотек.
Я проследил проблему до ручной установки python3.5
.
После его удаления вручную (rm -r /usr/local/python*
), как описано в этой ошибке, dist-upgrade сработал хорошо.