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 :

Application sans fenêtre et mingw32


Sujet :

SDL

  1. #1
    Membre habitué Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Points : 129
    Points
    129
    Par défaut Application sans fenêtre et mingw32
    Salut,

    J'essaye de compiler une application sans fenêtre avec le compilateur windows de mingw32 sous linux (i586-mingw32msvc-g++) mais mon programme a l'air d'avoir du mal : il ne se lance pas sous windows.
    En fait il s'agit d'un server donc j'utilise la sdl juste pour les threads et les mutex. (plus tard les sockets peut être).
    Si je compile pour linux avec g++ le programme se lance et fonctionne sans problème. Si je compile la version windows (avec i586-mingw32msvc-g++) et que je le lance sous linux avec wine ça se lance et ça fonctionne sans soucis. Mais si je lance cette versions sous windows rien ne se passe, le processus n'est pas dans la liste des processus lancés (je pense qu'il doit se tuer tout de suite).
    Enfin si je lance avec Msys (console linux sous windows) il plante mais en m'ouvrant une boîte de dialogue disant
    runtime error
    the application has requested the runtime to terminate in an unusual way
    Pour info voilà la ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    i586-mingw32msvc-g++ -mwindows -Wall -g -Wno-uninitialized -Dmain=SDLmain  -o bin/server.exe (bla bla bla tous les .o) -lmingw32 -lwsock32 -lSDLmain -lSDL -lm
    Bref je ne sais même pas si je pose la question au bon endroit, parce que je ne sais même pas si c'est un problème SDL, windows, linux, etc.

    Bref si quelqu'un a une idée, ça m'arrangerait :-)

    Merci
    Tom

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Les programmes SDL, comme les programmes Glut, ont besoin d'une fenêtre. Si tu enlèves la fenêtre, je pense que le comportement est indéfini.

    Je pense que tu ne trouveras pas de solution facile, les seules qui me viennent à l'esprit :

    - Ouvrir une fenêtre et voir si cela résoud le problème sous Windows
    - Utiliser les APIs des systèmes d'exploitation

    Si ouvrir une fenêtre résoud le problème alors il faudra se trouver une raison de la laisser ou ne plus utiliser la SDL.

    Sinon, montre un code minimal exposant le problème,
    Jc

  3. #3
    Membre habitué Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Points : 129
    Points
    129
    Par défaut
    Merci pour cette réponse.
    Je ne pense pas que la fenêtre soit obligatoire. Surtout que pour les threads et els mutex il n'y a pas besoin d'iunitialiser la SDL, faut juste faire les include, lier libSDL et il faut la dll (je pense). J'ai essayé de rajouter un affichage : la fenêtre SDL s'ouvre bien mais ça ne change rien.

    J'ai un peu décortiqué le tout pour savoir de quoi ça venait exactement. Apparament c'est ni les threads ni les mutex. Je croyais que c'était parce que j'avais pas de console parce que je lis le clavier à un moment, mais en rajoutant -mconsole à la compilation, ça ouvre une console au lancement maintenant mais ça plante pareil.

    En fait je crois que le problème vient de ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      _listenfd = socket(AF_INET, SOCK_STREAM, 0);
      if (_listenfd < 0)
      {
        fprintf(stderr, "server: cannot open socket\n");
        throw;
      }
    Apparament _listenfd est inférieur à 0 car le message s'affiche, et donc l'exception est lancée. Comme je la rattrape nulle part ça peut expliquer le message d'erreur.

    Donc je pense que ce n'est plus un problème de SDL, mais des sockets avec mingw32 (winsock2). Faut donc que je voie pourquoi ça fait ça, et pourquoi pas essayer d passer à SDL_net. Ca risque d'être un peu galère.
    Tom

  4. #4
    Membre habitué Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Points : 129
    Points
    129
    Par défaut
    C'est bon, en fait c'était pas un problème de SDL. C'était juste que les sockets windows doivent être initialisées au lancement du programme.
    Je le faisais bien dans le client mais pas dans le serveur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        #ifdef __WIN32__
            // Initialisation de winsock (sous windows)
            WSADATA wsa;
            if(WSAStartup(MAKEWORD(1,1),&wsa)!= 0)
            {
                printf("main:%d : Impossible d'initialiser winsock !\n",__LINE__);
                exit(0);
            }
        #endif
    Par contre j'ai un souci qui reste : j'ai réussi à afficher une console avec -mconsole mais il n'affiche rien dedans, il utilsie toujours stdout.txt et stderr.txt, et la saisie clavier ne marche pas. J'essayerai d'enlever -mwindows pour voir si ça aide.
    Tom

  5. #5
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    normalement avec un appel à
    avant tout appel à SDLNet, ca devrait marcher sans avoir a faire de truc pas beau propre à windows...
    perso, j'ai déjà utilisé SDLNet sous windows sans jamais avoir de problèmes d'initialisation des sockets
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  6. #6
    Membre habitué Avatar de Metal Tom
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Points : 129
    Points
    129
    Par défaut
    J'utilise pas sdl_net pour le moment. Faut que je nettoie le code avant. C'est un collègue qui a fait tout ce qui est réseau. Il programme bien, mais pas toujours très proprement.
    Tom

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

Discussions similaires

  1. Lancer une application sans fenêtre ?
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 04/04/2011, 01h53
  2. Application access sans fenêtre access
    Par remyv23 dans le forum IHM
    Réponses: 4
    Dernier message: 12/11/2009, 10h50
  3. [FLASH MX2004] Ouvrir un exe sans fenêtre batch
    Par daner06 dans le forum Flash
    Réponses: 4
    Dernier message: 08/11/2005, 18h39
  4. Processus en boucle sans fenêtre ni console
    Par alainpeniche dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 26/07/2005, 17h43
  5. Réponses: 4
    Dernier message: 04/04/2004, 13h59

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