我正在尝试编译一个OpenGL程序,它使用SDL来创建上下文和加载图像。当我在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和i686-w64-mingw32.static-pkg-config SDL_image --cflags --libs放在参数中,而不是显式链接(这只是给SDL_GL_CreateContext和IMG_Load这样的SDL函数提供了未定义的引用,并表示Package SDL_image was not found in the pkg-config search path.)。
发布于 2016-03-03 15:58:16
我已经在/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 one之前,确保键入sdl2 (在小情况下为SDL)和SDL2_image (在caps中为SDL),使用-mwindows、-lmingw32并使用-lopengl32代替-lgl
发布于 2016-03-03 13:44:01
您应该使用pkg-config -c频标志、sdl2、和pkg-config - libs sdl2来获取所需的所有标记和库。(顺便说一句。不要包含SDL2 2/ SDL.h,而是只包含SDL.h,如果您想要更可移植,则使用pkg-config -c标志值来设置包含路径)
您也可以使用sdl2 2-config,而不是使用pkg-config。
如果这对您的设置也没有帮助,那么请查看与mxe一起提供的sdl2示例。将您的代码添加到其中,并通过在mxe签出中运行makesdl2,尝试(重新)编译mxe中的sdl2。(https://github.com/mxe/mxe/commit/c3624cdefb7ff0c4b69316c7c1b740b97f55e1db)
https://stackoverflow.com/questions/35696413
复制相似问题