J’ai eu l’erreur undefined reference to WinMain@16
. Pour économiser de l’espace, voici un lien vers tous les fichiers actuellement dans le projet . À l’heure actuelle, il ne devrait pas faire grand chose d’autre que créer une fenêtre, la remplir en vert puis tracer une case dans le coin, tout en suivant la position de ma souris dans la console. Cependant, cela ne se construira pas et on me donne l’erreur susmentionnée.
Mes bibliothèques de liens sont:
J’utilise Codeblocks 13.12 avec g ++ conformément à la norme de langage C ++ 11 ISO C ++. Mon PC utilise Windows 10 au cas où cela serait pertinent.
J’ai passé beaucoup de temps à essayer de trouver une solution et il semble que tout le monde en a une tout à fait différente, et jusqu’à présent, aucune d’entre elles n’a fonctionné pour moi. Quelques exemples incluent:
-lSDL2_image
. main
en WinMain
. J’ai reçu le même message d’erreur. Windows.h
. Cela n’a rien remarqué. Je tiens également à souligner que la réponse fournie par l’utilisateur, à la vôtre et hth. – Alf, voici peut-être ce que je recherche, mais en toute honnêteté, je ne comprends pas bien ce que je suis censé faire à partir de cela.
Si j’ai oublié d’inclure toute information pertinente, dites-le-moi et je le ferai dès que possible. Merci d’avance.
Je pense que tu veux
#define SDL_MAIN_HANDLED
dans votre fichier principal, AVANT la ligne
#include
Explication:
Dans SDL / SDL2, pour tenter de simplifier le développement multiplate-forme de certains types d’applications, SDL crée un “point d’entrée” personnalisé pour votre application. C’est-à-dire que votre int main()
n’est pas le véritable principal. Ce qui se passe est que main
est défini comme une macro dans l’en-tête SDL, ce qui entraîne le SDL_main
de nom de votre main en SDL_main
ou similaire. Ensuite, dans la bibliothèque “SDL_main”, un main
différent est défini, qui sera le véritable main
de votre application. Ce main
récupère simplement les arguments de ligne de commande de la manière appropriée pour la plate-forme et appelle votre main
(qui a été renommé SDL_main
).
Sous Windows, il existe également des différences quant au fait que votre application soit démarrée en tant que programme console ou en tant que programme graphique, iiuc.
Parfois, vous souhaitez que SDL réalise ces opérations pour vous, mais si vous développez un programme de console traditionnel, vous ne le faites généralement pas. Donc, vous transmettez à SDL cette définition SDL_MAIN_HANDLED
afin d’empêcher de faire tout ce travail.
L’approche #undef main
fonctionnera également, mais ce n’est pas tout à fait aussi bien, car de cette façon, vous dites à SDL ce qui se passe, avec l’autre méthode, SDL pense que tout son contenu va être utilisé et vous le désactivez grossièrement avec #undef
plus tard.
Si vous souhaitez voir les détails des différentes vérifications de macros / plates-formes, vous pouvez regarder dans l’en-tête SDL_main.h
. Si vous souhaitez connaître les avantages du système principal SDL, consultez la documentation SDL.