Je suis relativement nouveau à la programmation et j'ai décidé de donner un essai SDL, mais je suis un peu coincé. Je n'ai pas été en mesure de construire le projet dans CodeBlocks et que je reçois une "référence non définie" à toutes les fonctions SDL. J'ai vu beaucoup de questions similaires ici, mais aucune des solutions ne semble aider. J'ai déjà ajouté le\Inclure\sdl2 et les dossiers\Lib pour rechercher des annuaires, j'ai ajouté SDL2Main et SDL2 à des bibliothèques de liaison dans les options de liaison, j'ai même ajouté -Mwindows à d'autres options de liaison. En outre, j'ai essayé également de relier la version 64 bits, mais les choses ont encore pire.
Voici mon code source, à peu près copié tout de suite du tutoriel que j'ai commencé:
#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;
}
Et voici le journal de construction:
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)
Y a-t-il autre chose que je pourrais essayer? J'aimerais vraiment avoir cette course et j'apprécierais toute aide.
Un problème possible est que votre lien avec une bibliothèque SDL2 pour une architecture différente.
Vous devriez utiliser
SDL2-2.0.1\i686-w64-mingw32
à la place de
SDL2-2.0.1\x86_64-w64-mingw32
Aussi, après avoir défini le chemin de recherche de la bibliothèque, utilisez cette notation pour créer un lien vers les bibliothèques.
-lmingw32 -lSDL2main -lSDL2
C'est beaucoup plus facile à lire.
Au lieu d'ajouter un chemin complet, essayez -LC:/PATH_TO_SDL -lSDL2main -lSDL2
(ou une seule option SDL) à la place; le lib
et .a
est déjà connu sous la liaison.
(Je ne sais pas si vous devez utiliser soit /
ou \
)
Puisque vous utilisez c ++, remplacez votre inclusion avec ceci:
extern "C"
{
#include "SDL.h"
}
Cela indique au compilateur de traiter SDL comme C - et non C++ - Code.
Voir aussi: SDL2 ne reliera pas correctement