SDL2 на Raspbian/Debian

Я пытаюсь связать SDL2 с Raspbian Stretch, основанным на Debian.

Я следовал инструкциям:

Системы на основе Debian (включая Ubuntu) могут просто выполнить «sudo apt-get install libsdl2-2.0», чтобы установить библиотеку для всей системы, а также всевозможные другие полезные зависимости.

Но я понятия не имею, где в мире это установлено и найти. -name **sdl* на самом деле не помогло... тем временем моя команда сборки в gnat по-прежнему говорит мне, что ничего не находит:

gnatmake -g main.adb -Isource -I../source/win -I../source -I../SDL2 -gnatwk -gnatwr -gnatwu -D objectFiles -largs -lSDL2 -lSDL2_Mixer -lSDL2_ttf obj1.o obj2.o
(...)
/usr/bin/ld: cannot find -lSDL2
/usr/bin/ld: cannot find -lSDL2_Mixer
/usr/bin/ld: cannot find -lSDL2_ttf
(...)

Поэтому я попытался построить себя в соответствии с приведенными ниже инструкциями:

Если вы компилируете SDL самостоятельно, вот то, что мы называем "способом сборки Unix":

  • Получите копию исходного кода либо из Mercurial, либо из официального архива, либо из любого другого источника.
  • Создайте отдельный каталог для сборки (SDL откажется от сборки в базе исходного дерева).
  • Запустите скрипт configure, чтобы все настроить.
  • Запустите «make», чтобы скомпилировать SDL.
  • Запустите «make install», чтобы установить новую сборку SDL в системе.

Это выглядит примерно так:

hg clone https://hg.libsdl.org/SDL SDL
cd SDL
mkdir build
cd build
../configure
make
sudo make install

Все делало то, что должно было делать (или, по крайней мере, нигде не говорилось, что оно НЕ делало то, что должно было делать), но теперь я до сих пор не знаю, как это связать. Я попытался скопировать файл libsdl2.so в рабочий каталог и изменить -lSDL2 на -llibsdl2, но безуспешно. Очевидно, мне нужно проделать ту же процедуру с другими библиотеками, но я надеялся, что смогу беспокоиться об одной за раз.

Есть дополнительные инструкции, но они, похоже, относятся конкретно к C:

После установки библиотеки вы можете использовать программу sdl2-config, которая поможет вам скомпилировать собственный код:

gcc -o myprogram myprogram.c `sdl2-config --cflags --libs`

И я не знаю, как сделать что-то подобное для Ады.

Проблема в том, что у меня просто нет опыта компоновки в Linux, и все, что я могу найти в Интернете, настолько общее, что я не могу применить его к своему делу.

Что касается того, с какой стати я хотел бы это сделать, создание этого для Raspberry Pi не было чем-то, что я планировал с самого начала проекта, но для меня стало важно иметь возможность сделать это.

Кто-нибудь знает, как я могу заставить это работать? Я могу без проблем собрать его в Windows, так что на самом деле это просто вопрос приведения библиотеки в состояние, в котором она мне подойдет для сборки в Linux.


person Devsman    schedule 14.07.2018    source источник
comment
dpkg -L libsdl2-2.0 должен сказать вам, что он установил. Вероятно, вам также понадобится libsdl2-2.0-dev. То же самое касается ttf и микшера, это отдельные библиотеки.   -  person keltar    schedule 14.07.2018


Ответы (2)


Компилятор Ады может связываться только с библиотеками Ады. Он не может связываться с произвольными библиотеками C, такими как SDL2.

Вам нужно будет установить что-то вроде sdlada.

person Community    schedule 14.07.2018
comment
Спасибо за ответ. Однако я должен был указать: я уже использую SDLAda, и проект без проблем строится на Windows. Позвольте мне сделать это редактирование. - person Devsman; 14.07.2018

Я нашел решение, и, как я и ожидал, это было совершенно новичком.

После копирования .so, созданного процессом сборки SDL, в рабочий каталог, я сделал ошибку, изменив аргумент компоновщика на полное имя файла .so (минус расширение):

gnatmake -g main.adb -Isource -I../source/win -I../source -I../SDL2 -gnatwk -gnatwr -gnatwu -D objectFiles -largs -llibsdl2 -lSDL2_Mixer -lSDL2_ttf obj1.o obj2.o

Что мне нужно было сделать, так это оставить все как есть:

gnatmake -g main.adb -Isource -I../source/win -I../source -I../SDL2 -gnatwk -gnatwr -gnatwu -D objectFiles -largs -lSDL2 -lSDL2_Mixer -lSDL2_ttf obj1.o obj2.o

После сборки SDL_Mixer и SDL_TTF все работает как положено.

person Devsman    schedule 14.07.2018
comment
Я почти уверен, что взялся за создание общих библиотек. Идея состоит в том, чтобы построить его статически, чтобы было меньше библиотек, о которых нужно беспокоиться. Также gnatmake не позволяет использовать файлы gpr, используйте gprbuild и файл gpr. См. test.gpr. - person Luke A. Guest; 17.07.2018