Какие двоичные файлы необходимы для моей программы SDL2, чтобы она работала на другом компьютере без установленного SDL2? - PullRequest
0 голосов
/ 18 января 2020

Какие бинарные файлы необходимо отправить с моей программой на основе SDL2, чтобы она могла работать на другом компьютере без установленного SDL?

Библиотеки, необходимые для моей программы:

iostream
SDL2/SDL.h
SDL2/SDL_image.h
ctime
cstdlib

Двоичные файлы который я уже пытался использовать:

libSDL2.so
libSDL2-2.0.so.0.8.0
libSDL2_image.so
libSDL2_image-2.0.so.0.2.1

PS: я проверяю, работает ли мой пакет программ с загрузочным пером Xubuntu

1 Ответ

1 голос
/ 18 января 2020

Краткий ответ: «использовать ldd». Далее следует длинный ответ.

ldd ./your_program покажет рекурсивный список всех зависимостей времени выполнения (ваших и зависимостей каждой используемой вами библиотеки и их зависимостей, ...).

readelf -d ./your_program | grep NEEDED покажет ваши прямые зависимости (только те, с которыми ваша программа на самом деле ссылается - не обязательно означает, что вы можете копировать только те).

LD_DEBUG envvar может использоваться для отслеживания того, какие библиотеки загружаются во время выполнения (например, с помощью dlopen).

Если вы нацелены на один указанный c дистрибутив, возможно, будет сложнее собрать пакет с указанными зависимостями, например, apt установит SDL для вас.

Следующий большой вопрос где вы взяли свой SDL. Многие дистрибутивы отключают динамические загрузчики SDL c, поэтому он не будет работать без, например, libX11, wayland, libXi, pulseaudio, ... Это очень хорошо для этого дистрибутива, так как он никогда не предназначался просто скопируйте некоторые библиотеки на другую машину. Если вы создадите его сами, у вас может быть гораздо меньше прямых зависимостей, и SDL попытается dlopen, когда это необходимо. SDL2_image, вероятно, более простой пример - он может зависеть от libjpeg, libpng, libz, ..., возможно, вам не нужны некоторые форматы, но если вы связались с этими библиотеками, вы не сможете работать без них.

Подумайте, какие библиотеки вы могли бы рассмотреть «всегда рядом». Например, нет смысла носить libX11 или lib c и многие другие. Эта часть является общей для всех ОС - вы не можете получить половину ОС с вашей программой по нескольким причинам.

Чтобы подвести итог, используйте сборку SDL с включенной динамической c загрузкой (я думаю, что это по умолчанию достаточно долгое время), скопируйте SDL / SDL_image, используйте LD_LIBRARIES_PATH, чтобы указать местоположение своих библиотек, проверьте список с помощью ldd, и все будет в порядке. Не копируйте lib c, libstdc ++, libpthread, libm.

...