c++代码块错误:对SDL_PollEvent和WinMain@16的未定义引用

C++ Code Blocks error: undefined reference to SDL_PollEvent and WinMain@16

本文关键字:PollEvent WinMain@16 引用 未定义 SDL 代码 错误 c++      更新时间:2023-10-16

当尝试创建我的第一个SDL应用程序时,我得到这2个错误,尽管我不确定它们是否相关。我试着找出每一个原因,但我没有找到任何帮助我。我使用的是SDL 2.0.3,我在Windows 7上。

我已经查找了WinMain错误,我发现它可能试图编译为windows应用程序而不是控制台。所以我确保它在我的项目设置中是主机,它仍然给我这个错误(尽管我不完全确定它应该设置为SDL游戏)。

我发现的任何与SDL_PollEvent错误相关的问题通常都是涉及到不止一行的链接问题。然而,我相当肯定我把它正确地链接起来,因为我以前确实有链接问题,我解决了,我有另一个参考SDL_Event,它没有错误。这似乎特别奇怪,因为SDL_PollEventSDL_Event都在同一个头文件中。

下面是我的源代码和完整的错误输出:

CApp.h:

#ifndef CAPP_H_INCLUDED
#define CAPP_H_INCLUDED
#include <SDL.h>
class CApp{
private:
    bool Running;
public:
    CApp();
    int OnExecute();
    bool OnInit();
    void OnEvent(SDL_Event* event);
    void OnLoop();
    void OnRender();
    void OnCleanup();
};

bool CApp::OnInit(){
    return true;
}

void CApp::OnEvent(SDL_Event* event){
}
void CApp::OnLoop(){
}
void CApp::OnRender(){
}
void CApp::OnCleanup(){
}

CApp.cpp:

#include "CApp.h"
CApp::CApp(){
    Running = true;
}
int CApp::OnExecute(){
    if(OnInit() == false){
        return -1;
    }
    SDL_Event event;

    while(Running){
        while(SDL_PollEvent(&event)){
            OnEvent(&event);
        }
        OnLoop();
        OnRender();
    }
    OnCleanup();
    return 0;
}
int main(){
    CApp theApp;
    return theApp.OnExecute();
}
错误输出:

||=== Build: Debug in CApp (compiler: GNU GCC Compiler) ===|
objDebugCApp.o||In function `ZN4CApp9OnExecuteEv':|
C:UsersUserNameC++ ProjectsTest PlatformerCApp.cpp|17|undefined reference to `SDL_PollEvent'|
c:program files (x86)codeblocksmingwbin..libgccmingw324.7.1......libmingw32.a(main.o):main.c:(.text.startup+0xa7)||undefined reference to `WinMain@16'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

提前感谢你的帮助:)

编辑:

链接器ourput:

mingw32-g++.exe -LC:SDLSDL2-2.0.3libx64 -LC:SDLSDL2-2.0.3lib -o "binDebugTest Platformer.exe" objDebugCApp.o   -lmingw32 -lSDL2main -lSDL2 -lgdi32
objDebugCApp.o: In function `ZN4CApp9OnExecuteEv':
C:/Users/Zshandi/C++ Projects/Test Platformer/CApp.cpp:17: undefined reference to `SDL_PollEvent'
collect2.exe: error: ld returned 1 exit status

我现在已经解决了我的问题,我花了一段时间才找到解决方案。对于WinMain@15错误,我发现这是因为SDL定义了它自己的主函数,所以我不得不将#undef main添加到我的源代码中。对于我遇到的另一个问题,似乎我使用了错误的库和包含给我错误的文件,我发现我必须使用32位的mingw文件。