2

Я разрабатываю кроссплатформенное приложение и у меня возникают проблемы с распространением бинарного файла Linux. В Windows DLL были - libsndfile-1.dll lua5.1.dll lua51.dll openal32.dll sfml-audio.dll sfml-graphics.dll sfml-network.dll sfml-system.dll sfml-window.dll

Это очень ранняя предварительная версия, поэтому я не хочу писать пакет. Мне просто интересно, чтобы пользователь скачал tarball и запустил бинарный файл внутри. Как пользователи могут получить эти зависимости в Linux без написания пакета?

PS Также у меня есть 64-битная версия Linux, и один пользователь сообщил, что приложение не работает на их 32-битной версии Linux. В чем может быть проблема? У меня не было этой проблемы с Windows (построена на 64-битной системе, работает на 32-битной).

4 ответа4

2

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

Вам нужно будет установить следующее:

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

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

2

Вы можете статически связать программу со всеми библиотеками, кроме libc и libm. (Черт, вы даже можете ссылаться на них).

1

Эквивалентом в Linux является включение файлов .so в каталог в пакете, а сценарий оболочки должен установить $LD_LIBRARY_PATH чтобы он указывал на этот каталог, а затем запустить двоичный исполняемый файл.

Проблема с 32 против 64 заключается в том, что компилятор генерирует 64-битный код и связывает 64-битные библиотеки. Вам нужно установить 32-битный набор инструментов для создания 32-битного двоичного файла. Вы можете запустить file для различных двоичных файлов, чтобы подтвердить это.

1

Вы можете получить зависимости двоичного файла с помощью команды ldd

Например:

ldd program_binary

        libctest.so.1 => /opt/lib/libctest.so.1 (0x00002aaaaaaac000)
        libc.so.6 => /lib64/tls/libc.so.6 (0x0000003aa4e00000)
        /lib64/ld-linux-x86-64.so.2 (0x0000003aa4c00000)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .