我正在尝试编译一个使用SDL进行上下文创建和图像加载的OpenGL程序。当我在Linux上本地编译它时,它编译并运行没有错误。我在/ opt / mxe中安装了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
和{{1 }}
在参数而不是显式链接(简单地为SDL函数提供未定义的引用,如i686-w64-mingw32.static-pkg-config SDL_image --cflags --libs
和SDL_GL_CreateContext
,并说IMG_Load
)。
答案 0 :(得分:1)
您应该使用 pkg-config --cflags sdl2 和 pkg-config --libs sdl2 来获取所需的所有cflags和lib。 (顺便说一句,不要包含 SDL2 / SDL.h ,但只包括 SDL.h 并使用 pkg-config --cflags 值如果你想要更便携,可以设置包含路径)
您也可以使用 sdl2-config
,而不是使用 pkg-config如果这对您的设置也没有帮助 - 那么请查看随mxe提供的sdl2示例。将代码添加到其中,并尝试通过在mxe checkout中运行 make sdl2 来(重新)编译mxe中的sdl2。 (https://github.com/mxe/mxe/commit/c3624cdefb7ff0c4b69316c7c1b740b97f55e1db)
答案 1 :(得分:0)
我在/opt/mxe/
中安装了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
之前,确保键入sdl2
(小案例中的sdl)和SDL2_image
(上限为SDL),使用-mwindows
,-lmingw32
并使用-lopengl32
代替-lgl
< / p>