Ошибка кодовых блоков C ++: неопределенная ссылка на SDL_PollEvent и WinMain @ 16

0

Я получаю эти 2 ошибки при попытке создать свое первое приложение SDL, хотя я не уверен, связаны ли они. Я пытался найти причину для каждого, но ничего, что я нашел, не помог мне. Я использую SDL 2.0.3 и я на Windows 7.

Я просмотрел ошибку WinMain и я обнаружил, что она может пытаться скомпилировать как приложение Windows, а не консоль. Поэтому я убедился, что это консоль в настройках моего проекта, и это все равно дало мне эту ошибку (хотя я не совсем уверен, что она должна быть настроена для игры в SDL).

Любые связанные с SDL_PollEvent ошибки SDL_PollEvent которые я нашел, обычно связывают проблемы, которые связаны не только с одной строкой. Тем не менее, я уверен, что я связал это правильно, так как у меня были проблемы с связыванием, которые ранее были решены, и у меня есть другая ссылка на SDL_Event которая не дает ошибок. Это кажется особенно странным, поскольку и SDL_PollEvent и SDL_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) ===|
obj\Debug\CApp.o||In function 'ZN4CApp9OnExecuteEv':|
C:\Users\UserName\C++ Projects\Test Platformer\CApp.cpp|17|undefined reference to 'SDL_PollEvent'|
c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.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)) ===|

Заранее благодарю за любую помощь :)

Редактировать:

Linker ourput:

mingw32-g++.exe -LC:\SDL\SDL2-2.0.3\lib\x64 -LC:\SDL\SDL2-2.0.3\lib -o "bin\Debug\Test Platformer.exe" obj\Debug\CApp.o   -lmingw32 -lSDL2main -lSDL2 -lgdi32
obj\Debug\CApp.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
  • 2
    Похоже, вам не хватает библиотеки SDL; опубликовать полный вывод компоновщика
  • 0
    возможный дубликат неопределенной ссылки на `WinMain @ 16 '
Показать ещё 8 комментариев
Теги:
reference
sdl
undefined
codeblocks

1 ответ

0
Лучший ответ

Я теперь решил свои проблемы, мне потребовалось некоторое время, чтобы найти решения. Для ошибки WinMain @15, которую я получал, я узнал, что именно SDL определяет ее собственную главную функцию, поэтому мне пришлось добавить #undef main в мой источник. Для другой проблемы, с которой я столкнулся, похоже, что я использовал неправильные файлы lib и include, которые давали мне ошибки, я обнаружил, что мне нужно использовать 32-битные файлы mingw.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню