【问题标题】:Multiple "Undefined reference" errors with MXE and SDL2MXE 和 SDL2 出现多个“未定义引用”错误
【发布时间】:2016-02-29 09:51:04
【问题描述】:

我正在尝试编译一个使用 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 --libsi686-w64-mingw32.static-pkg-config SDL_image --cflags --libs 在参数中而不是显式链接(这只是为 SDL_GL_CreateContextIMG_Load 等 SDL 函数提供了未定义的引用,并表示 Package SDL_image was not found in the pkg-config search path.)。

【问题讨论】:

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


    【解决方案1】:

    您应该使用 pkg-config --cflags sdl2pkg-config --libs sdl2 来获取您需要的所有 cflags 和库。 (顺便说一句。不包括 SDL2/SDL.h 而只包括 SDL.h 并使用 pkg-config --cflags 值来设置如果您想更便携,请增加您的包含路径)

    除了使用pkg-config,你也可以使用sdl2-config

    如果这对您的设置也没有帮助 - 请查看随 mxe 提供的 sdl2 示例。将您的代码添加到其中,并通过在您的 mxe 结帐中运行 make sdl2 来尝试(重新)在 mxe 中编译 sdl2。 (https://github.com/mxe/mxe/commit/c3624cdefb7ff0c4b69316c7c1b740b97f55e1db)

    【讨论】:

    • 我不得不玩弄路径和排序,但 pkg-config 终于奏效了(出于某种原因,sdl-config 仍然没有奏效)
    【解决方案2】:

    我在 /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

    【讨论】:

      猜你喜欢
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      相关资源
      最近更新 更多