1. ホーム
  2. c++

[解決済み] SDL_main' への未定義の参照

2022-02-02 17:38:39

質問

最近、CodeBlockS 10.05を使ってSDLを操作してみることにしました。チュートリアルの http://www.sdltutorials.com/sdl-tutorial-basics と書いてあり、それに従って頑張っています。残念ながら、遭遇しています。

..\..\..\..\..\..\SDL\SDL-1.2.15\lib\libSDLmain.a(SDL_win32_main.o):SDL_win32_main.c|| undefined reference to `SDL_main'|

をコンパイルしようとすると

このサイトの質問や他のチュートリアル(主にLazyFooのチュートリアルとCodeBlocksのwiki)をたくさん探したのですが、解決策が見つからないようなんです。

  • Compiler tab (Search Directories) に C:\SDL-1.2.15include が追加されました。
  • リンカータブにC:୧✂⃛が追加されました。
  • ライブラリlibmingw32.a, libSDLmain.a, libSDL.dll.a の順にリンクされています。
    • libmingw32.a(CodeBlocksインストールディレクトリのMinGWlibフォルダーより
  • SDL.dll は System32 フォルダーとプロジェクト フォルダーにあります。

CodeBlocks wikiのチュートリアルに従おうとしたところ、(SDLプロジェクトを新規作成する際に)指定したディレクトリにSDL.hが見つからないと言われました。

CApp.cpp

#include "CApp.h"
#include "SDL\SDL.h"

CApp::CApp(){
    Surf_Display=NULL;

    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(int argc, char* argv[]){
    CApp theApp;

    return theApp.OnExecute();
}

CApp.h

#ifndef CAPP_H_INCLUDED
#define CAPP_H_INCLUDED
#include "SDL\SDL.h"

class CApp{
    private:
        bool Running;
        SDL_Surface* Surf_Display;

    public:
        CApp();
        int OnExecute();

    public:
        bool OnInit();
        void OnEvent(SDL_Event* Event);
        void OnLoop();
        void OnRender();
        void OnCleanup();
};



#endif // CAPP_H_INCLUDED

解決方法は?

この問題で考えられる唯一の理由は、ファイルを作成する際に main をビルドターゲットに追加するのを忘れていました。

私のmain.cppがあるリストの中にCApp.cppが見えるはずです。その上で右クリックし、プロパティをクリックします。ポップアップしたウィンドウでビルド・タブをクリックします。このように表示されるはずです。

OKをクリックし、Ctrl+F11(Rebuild)を押す。

がんばってください。