MXE和SDL2出现多个“未定义的引用”错误

时间:2016-02-29 09:51:04

标签: c mingw cross-compiling sdl-2 mxe

我正在尝试编译一个使用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 --libsSDL_GL_CreateContext,并说IMG_Load)。

2 个答案:

答案 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>