Краткий ответ: «использовать 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.