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.

16
demandé sur DmitryR 2013-09-07 14:21:47

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.

40
répondu 4pie0 2018-08-15 14:42:59

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.

3
répondu dpiron 2016-12-13 03:39:06

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

2
répondu Łukasz Mleczko 2015-07-01 17:07:57

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

2
répondu Gustavo Maciel 2017-07-17 00:39:11

Projet >> Propriétés >> l'éditeur de liens >> Avancé >> point d'entrée = principal et d'appliquer

0
répondu Michał Rugbuś 2018-05-09 21:40:32