Ошибка загрузки общих библиотек SDL2 при выполнении программы на другом компьютере - PullRequest
4 голосов
/ 08 января 2020

Я пытаюсь скомпилировать программу, которую я сделал, используя SDL2 для работы на других компьютерах (или в этом случае тестирую ВМ). Я компилировал его с правильными флагами, например, g++ main.cpp -o main -lSDL2, однако, когда я пытаюсь выполнить его на другой установке Ubuntu, я получаю эту ошибку.

error while loading shared libraries: libSDL2-2.0.so.0: cannot open shared object file: No such file or directory

Насколько я понимаю, это не проблема в моей компиляции, но с тем, как я ожидаю, что он будет работать на другой Linux установке; Я кросс-компилировал (используя mingw32) и протестировал его (используя недавно установленную виртуальную машину) на Windows, добавив правильные dll с exe (кажется, работает нормально), и я ожидал, что он будет работать аналогичным образом.

Какой стандарт в этих случаях? Должен ли я написать сценарии установки для установки библиотечных зависимостей на целевой машине? Есть ли другой способ, о котором я не знаю? Я никогда не выпускал приложения для Linux (или Windows), и я изо всех сил пытаюсь найти ресурсы, чтобы делать вещи "правильным образом".

Ответы [ 2 ]

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

Спасибо за все предложения, в итоге я остановился на простом способе, динамически компилирующем «простые в установке» библиотеки, например, -lSDL2 и другие статически (проверил лицензии и все должно быть в порядке), вот так:

g++ main.cpp -o main -Wl,-Bdynamic -lSDL2 -lSDL2_image -lSDL2_ttf -Wl,-Bstatic -lSDL2_gfx -static-libgcc -static-libstdc++

Я добавлю в свою документацию, как установить необходимые библиотеки SDL2.

0 голосов
/ 09 января 2020

Я не уверен, насколько вы знакомы с pkg-config, но вывод для sdl2 таков:

-D_REENTRANT -I/usr/include/SDL2 -lSDL2

Это было найдено при запуске этого:

pkg-config --cflags --libs sdl2

По сути, вам нужно указать, где находится SDL2 ДО вы на него действительно ссылаетесь.

Инструмент pkg-config разработан, чтобы сообщать вам необходимую информацию, когда вы хотите связать в пакет в Linux. Вы связывались с библиотекой, но забыли сообщить GCC, где находится библиотека.

Если вы хотите скомпилировать свой код, попробуйте следующее:

g++ main.cpp -o runme `pkg-config --cflags --libs sdl2`

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

Да, и вы должны заметить, ЗАКАЗАТЬ ВОПРОСЫ, КАК ДОБАВЛЯТЬ ФЛАГИ И БИБЛИОТЕКИ !!!

Есть много вопросов по SO, где порядок опций компилятора вызвал все проблемы. Не будь, как эти люди. Я предлагаю вам поискать SO для получения дополнительной информации об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...