6

私は今日 SDL を使い始めましたが、以前は問題がありました。

これは私のコードです:

#include <iostream>
#include "SDL.h"
#undef main

using namespace std;

int main(){
    if(SDL_Init(SDL_INIT_EVERYTHING)<0){
        cout << "error starting sdl" << endl;
    }
    return 0;
}

これはビルドログです:

-------------- Build: Debug in Graphics (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -g -std=c++11 -IC:\Users\73638G75MA\Documents\SDL2-2.0.3\x86_64-w64-mingw32\include\SDL2 -I"C:\Users\73638G75MA\Documents\C++ projects\Graphics" -c "C:\Users\73638G75MA\Documents\C++ projects\Graphics\main.cpp" -o obj\Debug\main.o
mingw32-g++.exe -LC:\Users\73638G75MA\Documents\SDL2-2.0.3\x86_64-w64-mingw32\lib -o bin\Debug\Graphics.exe obj\Debug\main.o  -lmingw32 -lSDL2main -lSDL2  
obj\Debug\main.o: In function `main':
C:/Users/73638G75MA/Documents/C++ projects/Graphics/main.cpp:8: undefined reference to `SDL_Init'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))

私はこれで可能なすべての助けを高く評価します。最初の #undef main は、それ以外の方法では実行できないためです。そこにない場合、コンソール アプリケーションの作成中に「winmain@16 への未定義の参照」が表示されます。

4

5 に答える 5

7

インクルードとライブラリの検索パスによる...\SDL2-2.0.3\x86_64-w64-mingw32\...と、64 ビット SDL2 でビルドしようとしています。コンパイラ名から判断すると、mingw32-g++あなたは mingw.org ツールチェーンを使用している思いますビットのみであり、64 ビット バイナリを作成することも、64 ビット ライブラリを使用することもできません。

ビルド済みの SDL2 を使用する場合は、対応するツールチェーン (64 ビット mingw-w64) をダウンロードして使用するか、ビルド パラメータを変更して SDL2 の 32 ビット ビルドを使用する必要があります (ディレクトリ内の開発ライブラリ アーカイブ)。i686-w64-mingw32

于 2015-05-11T01:43:21.587 に答える
2

ここにいくつかのエラーがあります。

1.

なぜここにあるのかわからないという理由だけで main を undef にしないでください! SDL を使用している場合、main()(ほとんど) 常に のように見える必要がありますint main(int, char **) {}したがって、削除#undef mainしてに変更int main()int main(int, char **)ます。

2.

x32 実行可能ファイルをビルドするときは、i686-w64-mingw32代わりにのコンテンツを使用する必要があります。x86_64-w64-mingw32したがって、コンパイル フラグを適切に調整してください。

x86_64-w64-mingw32おそらくx64アプリケーション用ですが、x32アプリケーションを構築していると思います。

于 2015-05-11T20:16:53.957 に答える