Статическая связь библиотек SDL2

Я использую Windows 7, Code:: Blocks и MinGW. У меня мало опыта, когда дело доходит до компиляции/создания чего-либо, особенно когда Code:: Blocks не использует make файлы.

Я загрузил SDL2-devel-2.0.0-mingw.tar.gz(библиотеки разработки SDL) из http://www.libsdl.org/tmp/download-2.0.php, и я Я хотел бы создать автономный исполняемый файл с использованием библиотек SDL2, но до сих пор мне всегда приходилось связывать файл SDL2.dll с исполняемым файлом, чтобы он работал.

Я слышал, что я не могу использовать динамические библиотеки статической связи, поэтому мой единственный вариант, похоже, что-то делает с исходными файлами, используя файл SDL2-2.0.0.tar.gz(Исходный код) из ссылки я упомянутое выше. Однако я не знаю, что мне с этим делать.

Мне удалось попробовать с исходными файлами импортировать проект Visual Studio в Code:: Blocks и его создать, но он говорит мне: "sdl-config Нет такого файла или каталога" (я не знаю, что это вызвало), Я также не уверен, что создание просто дает мне исполняемый файл, с помощью которого я не знаю, что я могу сделать, чтобы связать его с моим собственным исполняемым файлом.

Лучшим решением для решения этого случая будет лучший шаг за шагом идиотский дурак.

EDIT:

Мне удалось собрать библиотеки SDL с предоставленным руководством Jonas и получить файл libSDL2.a.

Сначала я только добавил путь libSDL2.a к разделу "Связывание библиотек:" - раздел Code:: Blocks, но я получил кучу ошибок, таких как "SDL_Init(), не объявленный в этой области".

В дополнение к пути libSDL2.a я также добавил путь к SDL2-2.0.0\include в каталог поиска компилятора, а также путь к SDL2-2.0.0\build.libs в каталог поиска компоновщика, Я также написал это в свой тестовый файл: #include "SDL.h". Мой тестовый файл теперь выглядит следующим образом:

#include "SDL.h"

int main( int argc, char* args[] ) {
    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );
    //Quit SDL
    SDL_Quit();
    return 0;
}

Кажется, он исправил проблему объявления, но теперь Code:: Blocks открыл файл SDL_mmjoystick.c и дал мне еще больше ошибок: "undefined ссылка на ссылку" waveInClose @4 "," undefined " 'waveOutClose @4' "," undefined ссылка на 'joyGetNumDevs @0' "и тонны других.

Вот скриншот того, что происходит, обратите внимание на другой цвет текста #include, я не уверен, почему это происходит: http://gyazo.com/00656a9c1e57a2bd0db1414fa7d68ced.png

Я не уверен, как правильно использовать эту библиотеку. Любая помощь в этом случае, или я должен задать еще один вопрос?

EDIT:

Я добавил -lSDL2 в параметры компоновщика и удалил другие параметры. Теперь он строит отлично:

mingw32-g++.exe -Wall -fexceptions  -g    -IC:\Users\User\Desktop\SDL2-2.0.0\include  -c "C:\Users\User\Desktop\CppProjects\SDL project\main.cpp" -o obj\Debug\main.o
mingw32-g++.exe -Wall -fexceptions  -g    -IC:\Users\User\Desktop\SDL2-2.0.0\include  -c "C:\Users\User\Desktop\CppProjects\SDL project\thetestfile.cpp" -o obj\Debug\thetestfile.o
mingw32-g++.exe -LC:\Users\User\Desktop\SDL2-2.0.0\build\.libs  -o "bin\Debug\SDL project.exe" obj\Debug\main.o obj\Debug\thetestfile.o   -lSDL2  ..\..\SDL2-2.0.0\build\.libs\libSDL2.a C:\Users\User\Desktop\SDL2-2.0.0\build\.libs\libSDL2.a  -mwindows
Output size is 945.80 KB
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 0 warnings (0 minutes, 1 seconds)

Но когда я пытаюсь запустить его, он говорит, что моему компьютеру не хватает SDL2.dll, в то время как все дело в static-link.

Итак, в настоящее время у меня есть путь для сборки /.libs в моих библиотеках Link -settings, -lSDL2 в других опциях компоновщика, а для каталогов поиска у меня есть путь к SDL2-2.0.0/include для компилятора и SDL2 -2.0.0/build/.libs для компоновщика.

В каталоге build/.libs также можно увидеть файлы libSDL2.a, libSDL2.dll.a, libSDL2.la и libSDL2.lai, которые я не знаю, каковы они.

Ответ 1

Не нужно перекомпилировать библиотеку, SDL2 предоставляется с библиотекой статических ссылок с именем "libSDL2.a" в папке "SDL2-2.0.0\i686-w64-mingw32\lib \".

Просто добавьте эти параметры в компоновщик:

"- lmingw32 -lSDL2main -lSDL2 -mwindows -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -static-libgcc"

в коде: Блоки в "Параметры проекта/сборки.../Параметры набора ссылок/Другие параметры компоновщика"

Эти параметры позволяют вам ссылаться на то, что использует SDL2.dll.

Вы можете восстановить их в файле "SDL2-2.0.0\i686-w64-mingw32\bin\sdl2-config"

Волшебный трюк - удалить или переименовать файл "libSDL2.dll.a" в папке "SDL2-2.0.0\i686-w64-mingw32\lib \". Я добавил "-", прежде чем держать его на случай, если он мне понадобится.

Я не знаю, почему эта свобода побеждает другую, и подсказка будет оценена.

Я пробовал с Code:: Blocks 12.11 MinGW32, и он работал.

Если вы работаете с некоторыми проектами, использующими динамическую ссылку и некоторые другие, которые используют статические ссылки, вам придется держите свои librairies в двух разных папках, зная, что "libSDL2main.a" будет в этих двух.

Извините за мое письмо, я не привык писать по-английски.

Mike