使用MinGW无法链接到SDL2函数

12

我是个相对新手的程序员,决定尝试一下SDL,但卡住了。在Codeblocks中我无法构建项目,所有SDL函数都出现"undefined reference"。我在这里看到了很多类似的问题,但似乎没有一个解决方案能帮到我。我已经将\include\SDL2和\lib文件夹添加到搜索目录中,将SDL2Main和SDL2添加到链接选项中的链接库中,甚至将-mwindows 添加到其他链接器选项中。我还尝试链接64位版本,但情况变得更糟。以下是我的源代码,基本上是从我开始学习的教程中直接复制的:

#include <SDL.h>
SDL_Window* g_pWindow = 0;
SDL_Renderer* g_pRenderer = 0;
int main(int argc, char* args[])
    {
        // initialize SDL
    if(SDL_Init(SDL_INIT_EVERYTHING) >= 0)
    {
    // if succeeded create our window
        g_pWindow = SDL_CreateWindow("Chapter 1: Setting up SDL",
        SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
        640, 480,
        SDL_WINDOW_SHOWN);
        // if the window creation succeeded create our renderer
        if(g_pWindow != 0)
        {
            g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, 0);
        }
    }
    else
    {
        return 1; // sdl could not initialize
    }
    // everything succeeded lets draw the window
    // set to black // This function expects Red, Green, Blue and
    // Alpha as color values
    SDL_SetRenderDrawColor(g_pRenderer, 0, 0, 0, 255);
    // clear the window to black
    SDL_RenderClear(g_pRenderer);
    // show the window
    SDL_RenderPresent(g_pRenderer);
    // set a delay before quitting
    SDL_Delay(5000);
    // clean up SDL
    SDL_Quit();
        return 0;
}

这里是构建日志:

mingw32-g++.exe -LC:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib  -o bin\Debug\GeometryProject.exe obj\Debug\main.o   -mwindows  C:\MinGW\lib\libmingw32.a C:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib\libSDL2main.a C:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib\libSDL2.a 
obj\Debug\main.o: In function `SDL_main':
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:7: undefined reference to `SDL_Init'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:13: undefined reference to `SDL_CreateWindow'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:17: undefined reference to `SDL_CreateRenderer'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:27: undefined reference to `SDL_SetRenderDrawColor'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:29: undefined reference to `SDL_RenderClear'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:31: undefined reference to `SDL_RenderPresent'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:33: undefined reference to `SDL_Delay'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:35: undefined reference to `SDL_Quit'
C:\MinGW\lib\libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
9 errors, 0 warnings (0 minutes, 0 seconds)

还有什么其他我可以尝试的吗?我真的很想让它能够运行,也会非常感激任何帮助。

2个回答

12

可能存在的问题是你链接了与不同体系结构相关的SDL2库。

你应该使用

SDL2-2.0.1\i686-w64-mingw32

与其

SDL2-2.0.1\x86_64-w64-mingw32

在设置库搜索路径之后,请使用此符号连接到库

-lmingw32 -lSDL2main -lSDL2

它更容易阅读。


谢谢你的第一个提示。 我以为 GCC 会发出有关错误架构的有用答案,但它没有。 我在这个无聊的事情上浪费了几个小时。 - user824425

2

不要添加完整路径,尝试使用-LC:/PATH_TO_SDL -lSDL2main -lSDL2(或仅选择一个SDL选项);链接器已经知道了lib.a

(不确定是否必须使用/\

由于您正在使用C++,请将您的include替换为以下内容:

extern "C"
{
    #include "SDL.h"
}

这告诉编译器将SDL视为C代码,而不是C++代码。

另请参阅:SDL2无法正确链接


看链接器错误,它被处理为 C 函数。(C++ 函数的名称会被编码以便编译器可以识别类型信息,如果有未定义引用的类型信息,MinGW 将显示它们。) - Xonar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接