MXE 和 SDL2 出现多个 "Undefined reference" 错误
Multiple "Undefined reference" errors with MXE and SDL2
我正在尝试编译一个使用 SDL 进行上下文创建和图像加载的 OpenGL 程序。当我在 Linux 上本地编译它时,它编译并运行没有错误。我在 /opt/mxe 中安装了 MXE 并检查了 SDL2 目录(其中包含 headers)在 /opt/mxe/usr/i686-w64-mingw32.static/include/
中,而相应的库(libSDL.a
等)在/opt/mxe/usr/i686-w64-mingw32.static/lib/
。
包含的 header 个文件是 <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 可能在内部使用)。我也必须 link 反对他们吗?我这样做对吗? (MXE页面好像没有详细说明)
PS。这个问题,或者它的变体,似乎在互联网上很流行。不过,我已经按照他们的指示去做了。我的主要功能定义为 int main(int argc, char *argv[])
,我 link 反对 -lmingw32、-lSDL2main 和 -mwindows,我已确保 GCC 参数中的路径正确,我尝试将 i686-w64-mingw32.static-sdl-config --cflags --libs
和 i686-w64-mingw32.static-pkg-config SDL_image --cflags --libs
在参数中而不是显式 linking(它只是为 SDL 函数提供了未定义的引用,如 SDL_GL_CreateContext
和 IMG_Load
并表示 Package SDL_image was not found in the pkg-config search path.
)。
你应该使用 pkg-config --cflags sdl2 和 pkg-config --libs sdl2 来获取所有的 cflags 和 libs你需要。 (顺便说一句,不要包含 SDL2/SDL.h,而只包含 SDL.h 并使用 pkg -config --cflags values to set your include paths if you want to be more portable)
除了使用pkg-config,您还可以使用sdl2-config
如果这对您的设置也没有帮助 - 请查看随 mxe 提供的 sdl2 示例。将您的代码添加到其中,并尝试在您的 mxe 结帐中通过 运行 make sdl2 在 mxe 中(重新)编译 sdl2。 (https://github.com/mxe/mxe/commit/c3624cdefb7ff0c4b69316c7c1b740b97f55e1db)
我在 /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
我正在尝试编译一个使用 SDL 进行上下文创建和图像加载的 OpenGL 程序。当我在 Linux 上本地编译它时,它编译并运行没有错误。我在 /opt/mxe 中安装了 MXE 并检查了 SDL2 目录(其中包含 headers)在 /opt/mxe/usr/i686-w64-mingw32.static/include/
中,而相应的库(libSDL.a
等)在/opt/mxe/usr/i686-w64-mingw32.static/lib/
。
包含的 header 个文件是 <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 可能在内部使用)。我也必须 link 反对他们吗?我这样做对吗? (MXE页面好像没有详细说明)
PS。这个问题,或者它的变体,似乎在互联网上很流行。不过,我已经按照他们的指示去做了。我的主要功能定义为 int main(int argc, char *argv[])
,我 link 反对 -lmingw32、-lSDL2main 和 -mwindows,我已确保 GCC 参数中的路径正确,我尝试将 i686-w64-mingw32.static-sdl-config --cflags --libs
和 i686-w64-mingw32.static-pkg-config SDL_image --cflags --libs
在参数中而不是显式 linking(它只是为 SDL 函数提供了未定义的引用,如 SDL_GL_CreateContext
和 IMG_Load
并表示 Package SDL_image was not found in the pkg-config search path.
)。
你应该使用 pkg-config --cflags sdl2 和 pkg-config --libs sdl2 来获取所有的 cflags 和 libs你需要。 (顺便说一句,不要包含 SDL2/SDL.h,而只包含 SDL.h 并使用 pkg -config --cflags values to set your include paths if you want to be more portable)
除了使用pkg-config,您还可以使用sdl2-config
如果这对您的设置也没有帮助 - 请查看随 mxe 提供的 sdl2 示例。将您的代码添加到其中,并尝试在您的 mxe 结帐中通过 运行 make sdl2 在 mxe 中(重新)编译 sdl2。 (https://github.com/mxe/mxe/commit/c3624cdefb7ff0c4b69316c7c1b740b97f55e1db)
我在 /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