2016-07-22 15 views
0

MinGWのg ++​​がSDLプログラムを正常にコンパイルできません。ここMinGWとSDLを使用してリンクできません:WinMain @ 16への未定義の参照

#include <SDL.h> 

int main(int argc, char* args[]) 
{ 
    SDL_Init(SDL_INIT_VIDEO); 
    SDL_Quit(); 
    return 0; 
} 

と私のコマンドおよびエラーレポートです:

C:\Users\briggs_w\Desktop\testSDL>g++ test.cc -IC:\MinGW\include\SDL 
-LC:\MinGW\lib -lSDL2 -lSDL2main -lmingw32 

C:\MinGW\lib/libmingw32.a(main.o):(.text.startup+0xa0): undefined reference to `[email protected]' 
collect2.exe: error: ld returned 1 exit status 

私はC:\MinGW\libフォルダにSDL2のlib\x64i686-w64-mingw32\libフォルダ内のすべてのものの上にコピーされたが、ここに私のサンプルプログラムです。

何が欠けていますか?おそらくコマンドラインで。

私は、同様のエラーに二つのスレッド上で見てなかった:

Undefined reference to [email protected] when using SDL - この

undefined reference to [email protected] C++, SDL-2をやって - コンパイラとリンカのフラグがsdl2-configによって提供されたように、私はあなたのコードをコンパイルした何の影響

+0

'-lmingw32 -lSDL2main -lSDL2'という順番です(もちろんlibの前のすべてのsrc/obj)。 – keltar

+0

うまくいった。私は答えとしてそれを受け入れるだろう。 –

答えて

0

を(msys2パッケージに含まれる):

gcc -O -Wall test.cpp `sdl2-config --cflags --libs` 

$ SDL2-configが

-I /にMinGW64 /含める/ SDL2 -Dmain = SDL_main

$ SDL2-設定--libs

-L /にMinGW64/libに-lmingw32 -lSDL2mainを--cflags - lSDL2だから、少なくとも-lmingw32がリンクされるとも-Dmain=SDL_mainが行方不明になったライブラリ内の他の位置にある

を-mwindows。ライブラリSDL2mainは静的ライブラリなので、リンクする前にmingw32が必要です。 SDLは、前にいくつかのSDLの初期化を行い のWinMain()のバージョンを提供しますので、あなたは、Windowsアプリケーションを 作成しているにもかかわらず、SDL FAQ for windows

から

あなたは(メイン使用しなければならない)の代わりのWinMainの() メインコードを呼び出してください。なんらかの理由でWinMain()を使用する必要がある場合、src/main/win32/SDL_main.cのSDLソースコードで を見て、WinMain()関数でどのような種類の初期化を行う必要があるのか​​を確認してください。 SDLが正常に動作します。

任意のライブラリーの場合は利用可能SDL2-config設定のようなものがあれば、私は、少なくともそれは出力内容を確認します。

+0

これが当てはまる場合、「SDL_mainへの未定義の参照」があったでしょうが、そうではありません。 – keltar

+0

@keltar私の推測では '-mwindows'は' main'を 'WinMain'に変換し、SDL2mainライブラリの' WinMain'は重複して破棄されて参照されないので、SDL_mainは参照されません。 –

+0

いいえ、libmingw32.aはWinMainを参照しているため、見つからない場合があります。ldリンカーは、特にライブラリが静的である場合、ライブラリの順序に敏感です。あなたの注文は正しいのでリンクされています。問題の注文はありません。 – keltar

関連する問題