Я пытаюсь скомпилировать программу OpenGL, которая использует SDL для создания контекста и загрузки изображений. Когда я компилирую его в Linux изначально, он компилируется и запускается без ошибок. Я установил MXE в / opt / mxe и проверил, что каталог SDL2 (содержащий заголовки) находится в /opt/mxe/usr/i686-w64-mingw32.static/include/, а соответствующие библиотеки (libSDL.a и т. Д.) Находятся в /opt/mxe/usr/i686-w64-mingw32.static/lib/.

Включенные файлы заголовков: <SDL2/SDL.h> и <SDL2/SDL_image.h>

Я пытаюсь скомпилировать указанную программу, используя

i686-w64-mingw32.static-gcc 5_transformation.c -I/opt/mxe/usr/i686-w64-mingw32.static/include -L/opt/mxe/usr/i686-w64-mingw32.static/lib -lmingw32 -lSDL2main -lSDL2 -lSDL2_image -lGLEW -lopengl32 -lm -mwindows

Однако он дает несколько неопределенных эталонных ошибок: [http://pastebin.com/JaadTNnv

] 1

Многие из этих ошибок кажутся связанными с Direct3D и т. П., Которые я не использую (но SDL2 может внутренне). Мне тоже нужно ссылаться на них? Я вообще все делаю правильно? (На странице MXE нет подробных инструкций).

PS. Этот вопрос или его варианты кажутся довольно популярными в Интернете. Однако я уже выполнил их инструкции. Моя основная функция определяется как int main(int argc, char *argv[]), я связываюсь с -lmingw32, -lSDL2main и -mwindows, я убедился, что путь в аргументах GCC правильный, я попытался поставить i686-w64-mingw32.static-sdl-config --cflags --libs и {{X2 }} в аргументах вместо явной ссылки (это просто давало неопределенную ссылку для функций SDL, таких как SDL_GL_CreateContext и IMG_Load, и говорило, что Package SDL_image was not found in the pkg-config search path.).

0
strNOcat 29 Фев 2016 в 12:51

2 ответа

Лучший ответ

Я установил MXE в /opt/mxe/, и у меня сработало следующее (файл, который я пытался скомпилировать, был 5_transformation.c):

/opt/mxe/usr/bin/i686-w64-mingw32.static-gcc 5_transformation.c -mwindows `/opt/mxe/usr/bin/i686-w64-mingw32.static-pkg-config --cflags sdl2` `/opt/mxe/usr/bin/i686-w64-mingw32.static-pkg-config --cflags SDL2_image` -lmingw32 -lGLEW -lopengl32 -lm `/opt/mxe/usr/bin/i686-w64-mingw32.static-pkg-config --libs sdl2` `/opt/mxe/usr/bin/i686-w64-mingw32.static-pkg-config --libs SDL2_image`

Убедитесь, что путь ко всем исполняемым файлам правильный (gcc, а также pkg-config), поместите аргумент --cflags перед --libs, убедитесь, что вы набираете {{X4 }} (sdl в маленьком регистре) и SDL2_image (SDL в заглавных буквах), используйте -mwindows, -lmingw32 и используйте -lopengl32 вместо -lgl

0
strNOcat 3 Мар 2016 в 15:58

Вы должны использовать pkg-config --cflags sdl2 и pkg-config --libs sdl2 , чтобы получить все необходимые cflags и библиотеки. (Между прочим. Не включайте SDL2 / SDL.h , а только SDL.h и используйте значения pkg-config --cflags для установки добавьте пути включения, если вы хотите быть более переносимым)

Вместо использования pkg-config вы также можете использовать sdl2-config

Если и это не помогает в настройке - посмотрите пример sdl2, который поставляется с mxe. Добавьте в него свой код и попробуйте (повторно) скомпилировать sdl2 в mxe, запустив make sdl2 в вашем mxe checkout. ( https://github.com/mxe/mxe/commit/c3624cdefb7ff3c3624cdefb7ff2b3d05eb5b5b7fb3db5b5b7fb5fb3dddddddddddd

1
Martin Gerhardy 3 Мар 2016 в 13:44