Вопрос

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

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

Это было полезно?

Решение

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

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

Если ваш make-файл в настоящее время выглядит так:

SDLLIBS=`sdl-config --libs`

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

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

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

Другие советы

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

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

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

Первая проблема заключается в том, что в Windows 7, похоже, изменилась методология, и они пошли ему на пользу.Инвентарь.Ссылка. 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.

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

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

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

В моей системе (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_image и многие из их зависимостей статические.libdl, вам никогда не нужна статика, поэтому создайте полностью статический двоичный файл, использующий SDL._имидж — плохая идея.Pulse,caca,aa и DirectFB, вероятно, можно сделать статичными.Я еще не зашел достаточно далеко, чтобы их понять.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top