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 :

Pb avec read et write sous vc++


Sujet :

SDL

  1. #1
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Points
    1 787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Par défaut Pb avec read et write sous vc++
    Bonjour,
    J'essaye d'utiliser les fonctions read et write dans un projet SDL sous visual c++ et j'obtiens à la compilation les erreurs suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sdl_test3 error LNK2019: unresolved external symbol _read referenced in function _SDL_main
    sdl_test3 error LNK2019: unresolved external symbol _write referenced in function _SDL_main
    sdl_test3 fatal error LNK1120: 2 unresolved externals
    J'imagine que c'est du à la façon dont est configuré mon projet (application windows..), car sous linux je n'ai aucun probléme de ce genre et le programme fonctionne trés bien.
    Je n'ai aucune idée comment resoudre ou contourner le probléme.
    Can you help me ? ^^

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Points
    4 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Par défaut
    Quel est ta commande de compilation ?

    As tu bien "linker" avec les bonnes librairies où se trouvent des fonctions read et write ?

  3. #3
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Points
    693
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Par défaut
    Attention read et write sont des appells systeme, je pense qu'il est préférable d'utiliser fread et fwrite de la bibliothèque C standart.

  4. #4
    mat.M
    Invité(e)
    Par défaut
    #include <stdio.h>
    // ou bien
    #include <iostream.h>

  5. #5
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Par défaut
    En C++, on ne met pas le .h dans l'include...

    Jc

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MatRem
    Attention read et write sont des appells systeme, je pense qu'il est préférable d'utiliser fread et fwrite de la bibliothèque C standart.
    +1 de plus, fread() et fwrite() sont bufferisées... ce qui evite des accès disques constants... les oreilles de tes joueurs (et tes perfs) t'en seront reconnaissant

  7. #7
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Points
    693
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Par défaut
    En effet, ils sont bufferisés, et aussi plus portables.

  8. #8
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Points
    1 787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Par défaut
    Bonsoir,
    Tout d'abord merci pour vos réponses.

    J'ai bien inclut <iostream>...
    Si je l'omet j'ai le droit à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    h:\game_v0.013\game.cpp(73): error C3861: 'read': identifier not found, even with argument-dependent lookup
    h:\game_v0.013\game.cpp(70): error C3861: 'write': identifier not found, even with argument-dependent lookup
    En fait dans le code read et write servent à ecrire dans un socket. Je m'occupe du portage d'un code de communiquation reseau utilisant les socket. Ce code a été ecrit par un college sous linux, ou il fonctionne sans probléme.
    Afin de pouvoir travailler tranquillement, en local, j'ai deja porté le code serveur, sous visual c++, et la je n'ai pas de probléme avec les fonctions read et write.

    Dans son code mon college se sert de read et write pour ecrire directement une structure dans le socket:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // C1.fdclient est le descripteur de fichier correpondant à la socket cliente
    // par laquelle on transmet C1 au serveur
    write(C1.fdclient,&C1,sizeof(C1));
    C1.fdclient est de type SOCKET, C1 une structure qui contient diverse informations sur un personnage ( ses coordonnées, le numero de la sprite à afficher..)

    Donc je ne peut pas utiliser fwrite et fread car il ne sagit pas réelement d'un descripteur de fichier mais d'un socket, même si il me semble que la différence est mince ( je debarque dans le monde de la prog reseau, mon domaine étant plutot l'affichage )

  9. #9
    Membre averti
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Points
    353
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Points : 353
    Par défaut
    La ou tu met tes lib faut d'abord mettre sdlmain.lib puis sdl.lib puis les autres lib sdl.

  10. #10
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Points
    1 787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Par défaut
    Euh je vois pas comment proceder pour avoir un ordre particulier dans l'ajout des différentes lib sous visual studio.. tu peut m'expliquer en details stp ?

  11. #11
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Points
    4 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Par défaut
    je pense que ta question aurait trouvé meilleur solution sur le forum C++,

    Mais pour t'aidé, si tu reprends le code source de ton amis, regarde les include qu'il a fait, et met les toi aussi, à moins que tu ne l'ai déjà fait ?

  12. #12
    mat.M
    Invité(e)
    Par défaut
    En fait dans le code read et write servent à ecrire dans un socket. Je m'occupe du portage d'un code de communiquation reseau utilisant les socket. Ce code a été ecrit par un college sous linux, ou il fonctionne sans probléme.
    Afin de pouvoir travailler tranquillement, en local, j'ai deja porté le code serveur, sous visual c++, et la je n'ai pas de probléme avec les fonctions read et write.

    Dans son code mon college se sert de read et write pour ecrire directement une structure dans le socket:
    Fallait le dire avant que c'est pour des sockets !
    Sous Windows faut pas programmer comme Unix ( désolé pour la portabilité )

    il faut utiliser les fonctions de Windows Socket ou WSA
    Sinon prendre Direct Play du SDK de Direct X

  13. #13
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Points
    1 787
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 787
    Par défaut
    C'est vrai que mon sujet n'est peut etre pas bien placé finalement.
    En fait je pensais que le probléme venait de la façon dont on configure un projet pour SDL. En effet, le serveur qu idoit etre une simple "console application", n'a aucun probléme avec read et write et compile correctement. En revanche le client, qui utilise principalement SDL et OpenGL, n'arrive pas a linker ces deux fonctions.
    En fait j'ai trouvé une solution, j'ai remplacé les write et read par des send et recv, coté serveur comme coté client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // C1.fdclient est le descripteur de fichier correpondant à la socket cliente
    // par laquelle on transmet C1 au serveur
    send(C1.fdclient,(char *)&C1,sizeof(C1),0);
    Maintenant ça compile correctement,et les informations (coord, id de sprite) circulent bien mais pour une raison inconnue mon serveur comme mon client plantent simultanément au bout de d'une minute environ.

    Pour repondre à mat.M, oui j'utilise bien WSA, mais il me semble que une fois initialisés (WSAStartup), les sockets sous windows marchent de la meme façon que linux... je me trompe ?

  14. #14
    mat.M
    Invité(e)
    Par défaut
    Oui les sockets sous Windows fonctionnent comme sous UNix mais il est préférable de prendre les API.

    SI tu as des problèmes de compilation , ne pas oublier de sélectionner "Multhitreaded dll" pour le runtime C/C++ ( Msvcrt.dll)

Discussions similaires

  1. Read et write un fichier avec Fortran
    Par jill_ dans le forum Fortran
    Réponses: 7
    Dernier message: 07/01/2013, 19h34
  2. Read et Write avec 2 paramètres
    Par alfnet dans le forum Langage
    Réponses: 4
    Dernier message: 08/09/2008, 22h20
  3. Envoi de fichiers avec read et write
    Par Z-fly dans le forum Réseau
    Réponses: 9
    Dernier message: 15/08/2008, 21h44
  4. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 20h50
  5. construire 1 gateway avec 1 carte réseaux sous débian
    Par regular dans le forum Développement
    Réponses: 4
    Dernier message: 28/08/2003, 02h05

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