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

SDL Discussion :

Compilation VC++2008 et SDL


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Points : 25
    Points
    25
    Par défaut Compilation VC++2008 et SDL
    Bonsoir a tous,

    J'ai un gros/tres gros probleme avec VC2008 et SDL.
    Il semblerai que la VC++2008 n'est compatible avec rien du tout !!! Allegro est impossible a compiler, et SDL se compile avec succes mais les executables se crash a chaque essai

    Je m'explique plus en details: j'ai commencer par re-installer la SDL mais pour VC++2008 cette fois vers 22:00 et il est maintenant 04:21. Alors que je pensai que ca prendrai que quelques minutes avant de commencer a programmer, je perd un temps considerable a chercher l'erreur sans comprendre
    J'ai pas cesser de compiler un programme de test (FOSDL1_1 du livre focus on SDL) pour en verifier l'installation de la SDL. Apres quelques erreur "LNK1561: le point d'entrée doit être défini" que j'ai rapidement resolu, l'executable fait 6656 octets (contre 16384 octets pour l'exe du livre).
    Le code source de SDL semble se compiler sans probleme.
    J'aimerai donc savoir si c'est encore une incompatibilite de plus de VC2008 car ce n'est pas la premiere fois que mon code source C++ qui fonctionnai parfaitement avec MinGW/DevC++ ne se compile plus correctement avec VC2008. Il semblerai que seul le code specifiquement ecrit pour VC2008 (comme par exemple le code c++ du livre BeginningGameProgramming_2ndEdition_Harbour se compile sans erreur !!!!)
    Je suis personnelement tres decu par la faible qualite de ce compilateur "professionnel" quand on voit la qualite et la simplicite de MinGW/DevC++
    J'ai deja regarder apres une solution dans la FAQ et le tutorial d'instalation de la SDL sur ce site web (la VC++2008 n'est meme pas cite !!! ?, y aurai-t-il un probleme chronique avec VC2008 ?)

    Merci de votre aide et de vos reponses future

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Je pense que votre problème vient d'une mauvaise configuration du projet.
    Pour l'histoire du poins d'entrée ( car certes, vous parlez beaucoup, mais vous ne dites pas où cela bloque de manière précise, donc je dis ce que je peux dire), premièrement, avec SDL, c'est SDLMain() ou main(), en fait, dépendant de la configuration ... et du compilateur ( mingw ou VC++ ) ( et de l'inclusion de SDLmain comme bibliothèque.
    Je pense que votre problème est autour de l'inclusion des bibliothèques... mais je ne pourrais pas en dire plus tant que je n'ai pas plus de détail

    Note: Il y a une section du forum consacré à la SDL .
    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.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Bonsoir et Merci de ta reponse,

    Voici le code source du livre "focus on sdl" qui teste l'installation de la sdl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    //focus on sdl
     
    //fosdl1_1.cpp
    //16APR2002
    //ernest pazera
     
    //requires static linkage to:  
    //sdl.lib, sdlmain.lib
     
    //requires dynamic linkage to: 
    //sdl.dll
     
    //include SDL stuff
    #include "sdl.h"
     
    //include ability to print to files
    #include <stdio.h>
     
    //main function
    int main(int argc, char* argv[])
    {
    	//initialize SDL
    	if (SDL_Init(SDL_INIT_VIDEO)==-1)
    	{
    		//error initializing SDL
     
    		//report the error
    		fprintf(stderr,"Could not initialize SDL!\n");
    	}
    	else
    	{
    		//SDL initialized
     
    		//report success
    		fprintf(stdout,"SDL initialized properly!\n");
     
    		//quit SDL
    		SDL_Quit();
    	}
     
    	//return 0
    	return(0);
    }
    En le compilant avec dev-c++, pas de probleme, le code exe est de 227,659 octets, ce qui est enorme compare a l'exe du livre (16384 octets).
    J'en ignore la raison.
    Bref, ca fonctione avec dev-cpp meme si l'exe n'est pas optimiser
    En vc2008, les parametres du compilateur par defaut sont les suivante:
    choix du projet: vide
    J'ajoute le source cpp,
    Dans les options du linker, taper le point d'entree, sinon , erreur "LNK1561: le point d'entrée doit être défini" apparait
    Dans les options du linker, taper les libs suivantes dans entree/dependances supp. sdl.lib sdlmain.lib et j'obtiens le resultat suivant:

    ------ Début de la génération*: Projet*: FOSDL1_1, Configuration*: Release Win32 ------
    Édition des liens en cours...
    Génération de code en cours
    Fin de la génération du code
    Incorporation du manifeste en cours...
    Le journal de génération a été enregistré à l'emplacement "file://c:\Programmation\Travail_C++\_SDL\FOSDL1_1\FOSDL1_1\FOSDL1_1\Release\BuildLog.htm"
    FOSDL1_1 - 0 erreur(s), 0 avertissement(s)
    ========== Génération*: 1 a réussi, 0 a échoué, 0 mis à jour, 0 a été ignoré ==========
    l'executable fait 6656 octets (contre 16384 octets pour l'exe du livre).
    Mais lors de son execution, FOSDL1_1.exe se crash!

    Je sais que beaucoups de code sources/librairies ne se compile pas correctement avec vc2008 alors qu'avec dev-cpp il n'y a au pire que des warnings.
    Allegro est un parfait exemple car meme en suivant les instructions specifique pour vc2008 par les programmeurs d'allegro (et en utilisant le make/projet pour vc2008 fourni) la bibliotheque ne se construit pas (interruption de la compilation)

    le code c++ du livre BeginningGameProgramming_2ndEdition_Harbour (directx 9) se compile sans erreur !!!!, code c++ propre et ecrit pour et avec vc2008.
    Donc les options de config ne doivent pas etre si mauvais que ca!

    J'espere que ces infos te suffiront pour m'aider a resoudre mon probleme, le compilateur du livre etait vc6 et donc les instruction d'installation totalement inutile aujourd'hui pour vc2008

    Autre petite question avec dev-c++ la taille de l'exe est enorme 227,659 octets, pourquoi cette difference ?

    Pour la taille du exe, j'ai finalement trouver, la version fournie par le devpack est la version debug-infos ! Il faut que je recompile le source pour une version release optimisee !!!

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Pour la difference de taille, comme vous avez pu le remarquer, c'est principalement a cause d'une difference entre la compilation en DEBUG et la compilation en RELEASE.
    Pourquoi une telle difference?
    Simplement parce que la version en mode debug va laisser plein d'information dans l'executable pour permettre au debuggueur de retrouver de se retrouver dans le code et de donner plein de retour a l'utilisateur. ( Les variables peuvent etre lu facilement, le code peut etre affiche, les point d'arret sont sur les lignes voulus ( en release c'est pas toujours possible a cause des optimisations ).
    La version release, n'aura pas toute ces informations ( appelee judicieusement, information de debugguage ) et en plus le compilateur fera des optimisations ( de vitesse, ou de taille ).

    Fermons donc cette grande parenthese .

    Pour moi ( bien sur cela peut changer ), un projet SDL doit avoir ces informations:

    - Ajout d'un repertoirse d'inclusion ( include ) pour que le compilateur trouve les en tetes ( .h ).
    - Ajout des bibliotheques suivantes: SDL , SDLmain

    Je ne change pas le point d'entree ( peut etre que c'est la cause de votre bug ).
    Si main ne suffit pas, comme j'ai pu le dire hier, il faut mettre SDLMain() a la place. Ceci est principalement a cause de windows, et n'est pas toujours utilie ( dependant du compilateur ).

    Finalement, le crash peut aussi venir du fait que vous utiliser Vista ou Windows 7 ... mais je ne parirai pas la dessus.

    Donc pour conclure, mon conseil est:
    Ne changez pas le point d'entrer avec les options du compilateur ( linkeur ), mais en changeant le nom de la fonction main par SDLMain. Pourquoi? parce que si on appelle SDLMain, c'est bien pour laisser la SDL avoir son propre point d;entree, car il faut certainement des choses dedans, que nous ne pouvons faire.
    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.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Merci pour ta reponse LittleWhite, malheureusement cela ne fonctionne pas
    Apres avoir enlever le point d'entree et utilisee sdlmain "int sdlmain(int argc, char* argv[])" au lieu de main , j'obtiens le resultat suivant:

    ------ Début de la génération*: Projet*: FOSDL1_1, Configuration*: Release Win32 ------
    Compilation en cours...
    fosdl1_1.cpp
    Édition des liens en cours...
    LINK : fatal error LNK1561: le point d'entrée doit être défini
    Le journal de génération a été enregistré à l'emplacement "file://c:\Programmation\Travail_C++\_SDL\FOSDL1_1\FOSDL1_1\FOSDL1_1\Release\BuildLog.htm"
    FOSDL1_1 - 1 erreur(s), 0 avertissement(s)
    ========== Génération*: 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

    On m'a conseiller dans un autre post sur ce forum http://www.developpez.net/forums/d89...r-sdl-dev-cpp/
    d'abandonner dev-cpp pour vc2008, dommage car dev-Cpp avait toujours compiler mes programmes sdl sans probleme.
    Mais c'est vrai qu'il n'est plus n'est plus mis-à-jour depuis longtemps ce qui rend son usage compliquer pour la "construction" des librairies a la main quand il n'y a plus de devpak ou de projet pour le faire.
    C'est d'ailleurs pour ca, et pour avoir un compilateur moderne, professionnel et puissant que j'ai installer vc2008. Je l'avais tester avec les codes sources pour directx 9.0 du livre de Harbour et la aucun probleme. Par contre allegro ne se compile pas meme avec le projet fourni par allegro

    Je suis donc obliger de trouver la solution avec ton aide, pour lequel je te remercie

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Si vous voulez toujours garder un bon compilateur, avec un bon EDI, prenez Code::Blocks qui est le remplaçant pour dev-cpp.
    ( C'est toujours du mingw derrière ( par défaut ) )

    Après, je n'ai pas dit 'sdlmain' mais SDLMain ou encore, on peut se débrouiller avec un simple int main().
    D'ailleurs moi j'ai réussi à compiler avec un simple
    Dès que j'ai le temps, je vous fait le projet pour VS2005 ( qui marche )
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Bonsoir LittleWhite,

    Merci de ton aide, vraiment mais j'ai finalement troiver le probleme des options du compilateur vc2008.
    C'etait vraiment une option vicieuse avec vc2008 pour un debutant pour ce compilateur (vc2008 etant un compilateur POUR WINDOWS, je ne vois pas l'interet de cette "options") mais maintenant que je le sais, c'est deja plus simple, et ca compile bien, meme mieux que l'exe du livre!
    exe du livre: 16384 octets --- exe de vc2008 release:10752 octets soit pres de 30% de gagner

    Je vais donc pouvoir recommencer a programmer mais cette fois avec vc2008

    Merci mille fois pour ton aide LittleWhite

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Je suis heureux pour vous.

    Pouvez vous indiquer ou décrire quel option a résolu votre problème, de façon à ce qu'un autre utilisateur passe et est une réponse
    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.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 45
    Points : 25
    Points
    25
    Par défaut
    Bonsoir LittleWhite,

    Bien sur, pas de probleme.
    L'option etait dans les options du projet executable a compiler par VC2008.
    Editeur de liens/systeme/sous-systeme
    A la premiere ligne il faut choisir "Windows (/SUBSYSTEM:WINDOWS)" pour regler le probleme du point d'entrer et le linkage avec la bibliotheque
    Ce qui etait normal et automatique pour dev-c++ doit l'etre specifiquement preciser pour vc2008. Ce qui est vraiment stupide pour vc2008, ce n'est pas tant l'option a choisir, c'est que ni dans le message d'erreur, ni dans la docs il n'est indiquer que cette option est neccessaire !!! Pour un debutant avec vc2008 comme moi, comment aurai-je sus cette infos ? Resultat, une semaine de perdu

    Je precise pour infos, que je programme depuis de tres nombreuses annees en c, c++ et Delphi, mais je prefere Delphi qui est beaucoup plus clair, lisible et efficace que le c++ que je n'ai plus pratiquer depuis 5 ans. Le c++ est rapidement illisible et incompatible entre differents compilateurs.
    Je vais d'ailleurs utiliser Delphi 7 avec la SDL, j'ai installer vc2008 pour compiler la bibliotheque SDL et avoir un binaire compatible.

    Au revoir LittleWhite, et merci beaucoup de ton aide

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    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 859
    Points : 218 579
    Points
    218 579
    Billets dans le blog
    120
    Par défaut
    Je vais rajouter des informations à propos de cette option. Il est vrai que je l'ai oublié.

    Cette option n'est pas vraiment une option par défault. En fait elle dépend du projet que l'on décide de crée ( et même pour dev-cpp ).
    Sous windows, pour avoir cette option correctement définie pour la SDL, il faut crée un projet Win32 ( non console ), je ne sais plus le nom.
    L'autre projet Win32 console, va définir cette option incorrectement, pour le cas de la compilation avec la SDL.
    En fait, le cas est identique sous dev-cpp, et l'option est correctement définie ou pas, selon le projet crée.

    Il est vrai aussi qu'il n'y a pas d'information explicite, mais on peut trouver facilement sur un forum .... ( Enfin c'est comme cela que j'avais appris ). Et surement que j'ai été long à réagir :s.

    Sinon ( mais c'est une parenthèse ), le C++ devient illisible dépendant de comment on écrit le code. Et puis il y a des moyens ( disons des règles à suivre) pour garder un programme qui marche sur tout les compilateurs que l'on veut ( même sous linux ).
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/01/2010, 09h04
  2. [4.5.2] compilation MSVC 2008
    Par Kalite dans le forum Débuter
    Réponses: 18
    Dernier message: 24/09/2009, 11h25
  3. Compiler ffplay (qui utilise SDL)
    Par cedouche dans le forum C
    Réponses: 1
    Dernier message: 20/08/2008, 14h59
  4. [COMPILER] VS 2008 C++ Express sur Matlab 2007b
    Par _moebius_ dans le forum MATLAB
    Réponses: 17
    Dernier message: 10/05/2008, 19h47
  5. compiler gtksdl , pkg-config sdl-config
    Par 7not6 dans le forum gtksdl
    Réponses: 7
    Dernier message: 21/07/2007, 11h14

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