私はプログラミングに比較的慣れていないので、SDLを試してみることにしましたが、少し行き詰まっています。コードブロックでプロジェクトを構築できず、すべてのSDL関数への「未定義の参照」が発生します。ここで同様の質問をたくさん見ましたが、解決策のどれも役に立たないようです。検索ディレクトリに\ include\SDL2と\ libフォルダーを既に追加しました。リンカーオプションでライブラリをリンクするためにSDL2MainとSDL2を追加しました。他のリンカーオプションに-mwindowsを追加しました。また、64ビット版もリンクしてみましたが、状況はさらに悪化しました。
これが私のソースコードで、私が始めたチュートリアルからほとんどコピーされています:
#include <SDL.h>
SDL_Window* g_pWindow = 0;
SDL_Renderer* g_pRenderer = 0;
int main(int argc, char* args[])
{
// initialize SDL
if(SDL_Init(SDL_INIT_EVERYTHING) >= 0)
{
// if succeeded create our window
g_pWindow = SDL_CreateWindow("Chapter 1: Setting up SDL",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
640, 480,
SDL_WINDOW_SHOWN);
// if the window creation succeeded create our renderer
if(g_pWindow != 0)
{
g_pRenderer = SDL_CreateRenderer(g_pWindow, -1, 0);
}
}
else
{
return 1; // sdl could not initialize
}
// everything succeeded lets draw the window
// set to black // This function expects Red, Green, Blue and
// Alpha as color values
SDL_SetRenderDrawColor(g_pRenderer, 0, 0, 0, 255);
// clear the window to black
SDL_RenderClear(g_pRenderer);
// show the window
SDL_RenderPresent(g_pRenderer);
// set a delay before quitting
SDL_Delay(5000);
// clean up SDL
SDL_Quit();
return 0;
}
そしてここにビルドログがあります:
mingw32-g++.exe -LC:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib -o bin\Debug\GeometryProject.exe obj\Debug\main.o -mwindows C:\MinGW\lib\libmingw32.a C:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib\libSDL2main.a C:\dev\sdl\SDL2-2.0.1\x86_64-w64-mingw32\lib\libSDL2.a
obj\Debug\main.o: In function `SDL_main':
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:7: undefined reference to `SDL_Init'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:13: undefined reference to `SDL_CreateWindow'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:17: undefined reference to `SDL_CreateRenderer'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:27: undefined reference to `SDL_SetRenderDrawColor'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:29: undefined reference to `SDL_RenderClear'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:31: undefined reference to `SDL_RenderPresent'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:33: undefined reference to `SDL_Delay'
C:/Users/Kris948/Desktop/ProjectsUni/GeometryProject/main.cpp:35: undefined reference to `SDL_Quit'
C:\MinGW\lib\libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minutes, 0 seconds)
9 errors, 0 warnings (0 minutes, 0 seconds)
他に試すことができるものはありますか?私は本当にこれを実行したいので、どんな助けにも感謝します。
考えられる問題は、異なるアーキテクチャのSDL2ライブラリへのリンクです。
あなたは使うべきです
SDL2-2.0.1\i686-w64-mingw32
の代わりに
SDL2-2.0.1\x86_64-w64-mingw32
また、ライブラリ検索パスを設定した後、この表記を使用してライブラリにリンクします
-lmingw32 -lSDL2main -lSDL2
読みやすくなります。
フルパスを追加する代わりに、代わりに-LC:/PATH_TO_SDL -lSDL2main -lSDL2
(または1つのSDLオプションのみ)を試してください。 lib
および.a
は、リンカによってすでに認識されています。
(/
または\
のどちらを使用する必要があるかは不明)
C++を使用しているため、インクルードを次のように置き換えます。
extern "C"
{
#include "SDL.h"
}
これは、SDLをC++コードではなくCコードとして扱うようにコンパイラーに指示します。
参照: SDL2は正しくリンクしません