SDL2 pas défini des références à des fonctions
Je vais essayer de mettre en place un projet C++ qui s'appuie sur MinGW et utilise SDL. Lorsque j'essaie de compiler mon programme, g++, dit undefined reference to 'SDL_Function'
pour chaque SDL fonction que j'utilise.
Lib/SDL2: le contenu de SDL2-devel-2.0.0-mingw.tar.gz à partir de SDL site
Source/Main.cpp:
#include "SDL.h"
int main(int argc, char *argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow(
"Hello World",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
640, 480, 0
);
SDL_Delay(3000);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
Je suis à l'aide du Râteau pour simplifier le processus de construction un peu, la commande qu'il produit:
g++ -Wall -ILib/SDL2/i686-w64-mingw32/include/SDL2 -Dmain=SDL_main -LLib/SDL2/i686-w64-mingw32/lib -lmingw32 -lSDL2main -lSDL2 -mwindows Source/Main.cpp -o Build/sdltest.exe
Et voici ce que g++ dit:
Main.cpp:(.text+0xe): undefined reference to `SDL_Init'`
Main.cpp:(.text+0x42): undefined reference to `SDL_CreateWindow'`
Main.cpp:(.text+0x51): undefined reference to `SDL_Delay'`
Main.cpp:(.text+0x5c): undefined reference to `SDL_DestroyWindow'`
Main.cpp:(.text+0x61): undefined reference to `SDL_Quit'`
ld.exe: bad reloc address 0x20 in section `.eh_frame'`
ld.exe: final link failed: Invalid operation`
collect2.exe: error: ld returned 1 exit status`
On dirait une commune du débutant problème, mais je pense que je passe tous les points de dépannage:
- Principale fonction est de s'
int argc, char *argv[]
- J'utilise tous les drapeaux de sdl-config (-Dmain=SDL_main -lmingw32 -lSDL2main -lSDL2 -mwindows)
- Je suis en train d'utiliser le " i686-w64-mingw32 version que supposé lors de l'utilisation de 32 bits MinGW
- Tous les chemins d'accès spécifiés semblent corrects
Aucune idée de ce qui se passe?
Merci pour la réponse. Comment puis-je faire?
Je me souviens de trébucher sur un étrange problème similaire, mais je ne me rappelle pas les détails exacts. Essayez de changer la séquence de l'entrée params, par exemple, g++ -o sdltext.exe $(sdlconfig --libs)
Wow, qui n'a absolument! Réponse dans une réponse complète.
OriginalL'auteur VCake | 2013-08-26
Vous devez vous connecter pour publier un commentaire.
Essayer de modifier la séquence de l'entrée params:
Je suis tombé sur cet avant (sur Linux):
Cet appel génère une erreur:
Cela fonctionne:
OriginalL'auteur zeroc8
J'ai changé l'ordre des paramètres d'entrée, et il a travaillé, mis SDL2main avant SLD2.
OriginalL'auteur Tidder Jail