IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

SDL + OpenGL [Linker error] undefined reference to `WinMain@16'


Sujet :

C++

  1. #1
    Débutant Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 68
    Points
    68
    Par défaut SDL + OpenGL [Linker error] undefined reference to `WinMain@16'
    Salut a tous !

    Bonsoir, j'écris sur ce forum pour savoir pourquoi j'obtiens l'erreur :
    • [Linker error] undefined reference to `WinMain@16'


    Je m'explique :
    Il y a quelques jours j'ai décidé d'utiliser le fichier SDL_image.h qui permet de lire plus ou moins n'importe quel format image, pour ensuite transformer cette dernière en texture utilisable pour OpenGL (j'ai vu sur certain forum que cela était faisable !) mais dès l'instant ou j'ai inclus ce fichier (ainsi que TOUT SDL qui va avec, bien sûr) j'ai eu cette erreur !!

    Petite précision :
    • Jusqu'ici j'ai utilisé OpenGL, et tout mes codes son prévu pour lui, je ne peut pas tout changer
    • MonIDE est Dev-C++
    • Mon projet est un projet console (lancer a partir d'un devpack)
    • Normalement j'ai linker tous les *lib


    Auriez-vous une idée du pourquoi du comment ?
    Merci
    Jonathan
    OpenGL est une librairie graphique 3D très évoluée et totalement portable offrant de nombreuses ressources aux programmeurs cherchant à faire de la synthèse d'images (pour les jeux par exemples).



    Je sais que ce pseudo est prétentieux mais je ne savais quoi mettre d'autre (à part Bill Gates peut-être !? )

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Le message, bien que légèrement cryptique, est relativement clair: l'éditeur de liens ne trouve pas la fonction principale main. Or, toute application doit disposer de la fonction main.

    Tu as donc deux solutions:

    Soit ton projet est destiné à fournir une bibliothèque, et il s'agira alors de modifier les options de compilation de manière à générer une telle bibliothèque (statique ou dynamique)

    Soit ton projet est une application au sens propre (équivalent à un *.exe sous windows), et il faut donc que tu crées une fonction main dans un fichier d'implémentation (qui se chargera d'initaliser SDL et OpenGL et de les utiliser). [EDIT]Peut être as tu "simplement" supprimé par erreur le fichier qui contenait la fonction main() de ton projet [/EDIT]

    Pour information, cela fait maintenant plusieurs années que DevC++ n'est plus maintenu (seuls certains devpack's le sont encore... et je ne peux absolument pas préjuger de la durée pendant laquelle ils le resteront)...

    Peut être serait-il intéressant pour toi d'envisager de changer d'IDE, pour, par exemple, Code::blocks, qui utilise nativement le même compilateur (Gcc) mais dans une version plus récente ou tout autre à ton gout
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Si je me rapelle bien, la solution à ton problème est juste de renommé ton main actuel par SDL_Main() ( voir doc pour le nom précis ( histoire de majuscules ) )

    Pourquoi faut t'il faire ça ?

    Parce que dans le fichier SDL.h il y a une redéfinition du main pour des histoires de compatibilité Windows / Autres système.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Bonjour,

    En fait, il aurait mieux valu poster ça dans le forum SDL...
    (Surtout que la question a été posée plein de fois!)

    Une recherche internet t'aurait aussi donné la solution facilement.

    Normalement remplacer
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char **argv)
    suffit.

    Sinon il faut vérifier l'ordre de linkage des lib, et vérifier que tu as bien linké mingw32 si tu es sous mingw.

  5. #5
    Débutant Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 68
    Points
    68
    Par défaut
    Bonjour,
    Merci pour toutes vos réponses !

    @coyotte507 > Pour la fonction main() elle est déjà sous la forme argc, argv et elle a toujours très bien fonctionné

    @LittleWhite > Effectivement il se trouve que j'avais déjà trouvé cela sur plusieurs forum mais malheureusement cela n'a rien changé

    @koala01 > En fait j'ai commencé sur Block:Code mais je n'ai jamais réussi (j'étais un noobs) a l'utiliser pour OpenGL (Je ne sais plus pour quelles raisons) se qui fait que j'en ai gardé une très mauvaise image; mais je vais le réinstaller et réessayer.

    Je vous tiens au courant
    Encore merci pour toutes vos réponces
    OpenGL est une librairie graphique 3D très évoluée et totalement portable offrant de nombreuses ressources aux programmeurs cherchant à faire de la synthèse d'images (pour les jeux par exemples).



    Je sais que ce pseudo est prétentieux mais je ne savais quoi mettre d'autre (à part Bill Gates peut-être !? )

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Je crois, mais je n'en suis plus très sur, qu'il faut aussi enlever les #include <windows.h> lorsque l'on utilise la SDL.

    Ou alors, si je me trompe encore, la dernière option, c'est de demander à l'IDE de faire un programme console et non un programme Windows ...
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    http://loka.developpez.com/tutoriel/...lation/devcpp/

    vérifie que l'ordre de linkage est bien le même (ça m'a déjà fait ce problème!) / ou que tu inclus bien les trois librairies par défaut (mingw32, SDLmain, SDL)

  8. #8
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Je confirme, où le main n'a pas la bonne forme (argc ...) ou c'est l'ordre de link des librairies qui n'est pas correcte.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/07/2012, 17h23
  2. [Linker error] undefined reference to `WinMain@16'
    Par juju03 dans le forum Dev-C++
    Réponses: 5
    Dernier message: 11/10/2007, 23h19
  3. Réponses: 1
    Dernier message: 14/11/2006, 11h12
  4. [Linker error] undefined reference to...
    Par z980x dans le forum C++
    Réponses: 4
    Dernier message: 05/03/2006, 15h30
  5. [Linker error] undefined reference to 'IcmpSendEcho@'
    Par Xevious dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 29/12/2005, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo