SDL2: LNK1561: le point d'entrée doit être défini
je veux compiler ce code:
#include <SDL.h>
int main(int argc, char* argv[]) {
return 0;
}
Mais il ne peut pas être lié: Error 1 error LNK1561: entry point must be defined
Il y a de drôles de code dans cette bibliothèque: http://hg.libsdl.org/SDL/file/75726efbf679/include/SDL_main.h
#define main SDL_main
J'ai aussi ajouté SDL2.lib;SDL2main.lib
Réglages du Projet => éditeur de liens => Entrée.
Que puis-je faire pour exécuter ce projet?
VS SP3 2012, empty C++ project.
5 réponses
Selon ce fil sur le Rêve.Dans.Code:
clic droit sur le nom du projet - > Propriétés - > étendre l'onglet Linker - > système - > sous-système: assurez-vous qu'il est
Console (/SUBSYSTEM:CONSOLE)
alternativement, si vous voulez cacher la fenêtre de la console ou êtes débogage d'une application multithread, vous devriez définir le sous-système à Window (/SUBSYSTEM:WINDOW)
à la place.
j'ai trouvé ce paramètre /SOUS-SYSTÈME:CONSOLE n'est que la moitié de la solution. La seconde moitié est à ajouter SDL_MAIN_HANDLED
pour les définit. L'indice que j'ai utilisé pour résoudre ceci peut être trouvé dans SDL_main.h. Réglage SDL_MAIN_HANDLED
dites aux fichiers d'en-tête SDL que vous avez déjà fourni un main
fonction et ne pas vouloir redéfinir son propre point d'entrée.
tinky_winki écrit
clic droit sur le nom du projet - > Propriétés - > agrandir l'onglet Linker -> Système -> sous-système: assurez-vous que c'est la Console (/SUBSYSTEM:CONSOLE)
mais si vous ne vous attendez pas à une console avec window, utilisez simplement / SOUS-SYSTÈME: WINDOWS
NE PAS#undef main
! alors que C'est une très mauvaise pratique du côté de SDL de la redéfinir, ils ont de bonnes raisons: WinMain
est défini du côté de la bibliothèque et utilisé pour exécuter du code init, aidant avec les problèmes de compatibilité. (encore plus lorsqu'on utilise différentes implémentations SDL, comme Steam ou le portage sur D'autres plateformes comme Android)
Alors, que devez-vous faire? Lorsque vous utilisez Windows, vous devez toujours inclure SDL2main.lib
avant SDL2.lib
et assurez-vous que votre main est dans la format:
int main(int argc, char* argv[]) // CORRECT
void main(int argc, char* argv[]) // WRONG
int main(int, char**) // MAY BE CORRECT
Source:SDL2 Windows FAQ
Projet >> Propriétés >> l'éditeur de liens >> Avancé >> point d'entrée = principal et d'appliquer