Как статически компилировать SDL-игру в Windows

Я пытаюсь создать статически связанную "одиночную двоичную" версию моей игры для окон. Я хочу связать с sdl, sdl_image и sdl_mixer, которые, в свою очередь, вытащить несколько библиотек поддержки. К сожалению, я не нашел способа заставить их всех скомпилировать и связать, используя cygwin/mingw/gcc. Насколько я могу судить, все существующие общедоступные версии - это только общие библиотеки /dll.

Обратите внимание, что я не говорю о лицензировании здесь. Источник будет открыт, поэтому GPL/LGPLness sdl не имеет значения.

Ответы

Ответ 1

При компиляции вашего проекта вам нужно внести пару изменений в ваш файл.

  • Вместо sdl-config --libs используйте sdl-config --static-libs
  • Окружать использование вышеупомянутого sdl-config --static-libs с помощью -Wl,-Bstatic и -Wl,-Bdynamic. Это указывает GCC на принудительное статическое связывание, но только для библиотек, указанных между ними.

Если ваш файл в настоящий момент выглядит следующим образом:

SDLLIBS=`sdl-config --libs`

Измените его на:

SDLLIBS=-Wl,-Bstatic `sdl-config --static-libs` -Wl,-Bdynamic

На самом деле это то же самое, что вы должны делать в Unix-подобных системах, но обычно это не вызывает столько ошибок в Unix-понравившихся, если вы используете более простой флаг -static для GCC, как в Windows.

Ответ 2

Через это сообщение о рассылке SDL кажется, что средства разработки sdl поставляются с sdl-config script, которые вы можете использовать с флаг -static-libs, чтобы определить, какие флаги компоновщика вам нужно использовать.

Ответ 3

Среда: виртуальная машина VMWare с Windows 7 x64 и оборудование, которое мы разработали Dev c + + 7.4.2.569, complilador g + + (tdm-1) 4.6.1

Как только API SDL2-2.0.3, установленный как конфигурация Dev С++, не совсем ясен, что я сделал, поскольку традиция требует командной строки.

Первая проблема заключается в том, что Windows 7, похоже, изменила методологию, и они отправляются на свой мяч. Inventory. Ссылка https://stackoverflow.com/users/464581/cheers-and-hth-alf

После первого препятствия SDL_platform.h это плохо, это еще один, я не помню, где я скачал, но следующий не работает в указанной версии.

Мы должны поместить SDL2.h ls в каталог исполняемого файла.

D:\prg_desa\zsdl2>g++ bar.cpp main.cpp -o pepe1 -ID:\SDL2-2.0.3\i686-w64-mingw32\include\SDL2 -LD:\SDL2-2.0.3\i686-w64-mingw32\lib -lmingw32 -lSDL2main -lSDL2 -mwindow

Я, наконец, скомпилировал и работает тестирование SDL2.

Ответ 4

Это потому, что библиотеки SDL находятся под лицензией LGPL.

Если вы хотите статическую ссылку на libs (вы можете сделать это, если перекомпилируете их. Для этого вам нужно взломать make файлы), вы также должны разместить свою игру под совместимой лицензией с открытым исходным кодом.

SDL-libs поставляются в виде разделяемых библиотек, потому что большинство программ, которые их используют, являются закрытыми. Бинарное распределение поставляется в форме, которая нужна большинству людей.

Ответ 5

В моей системе (Ubuntu) я должен использовать следующие флаги:

-Wl,Bstatic -lSDL_image `sdl-config --libs` -lpng12 -lz -ltiff -ljpeg -lasound -laudio -lesd -Wl,-Bdynamic `directfb-config --libs` -lpulse-simple -lcaca -laa -ldl

Это связывает образ SDL, SDL _ и многие из их зависимостей как статические. libdl вы никогда не хотите статического, поэтому создание полностью статического двоичного файла, использующего SDL _, является плохой идеей. импульс, кака, аа и directfb, вероятно, могут быть сделаны статическими. Я еще не достаточно далеко, чтобы понять их.