Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec IrrNetLite

Basé sur la librarie réseau enet

    10 octobre 2007 à 20:43:11

    Salut à tous :)

    Je suis en train de m'entraîner aux fonctions réseaux en utilisant la librarie IrrNetLite (étant basée sur enet).
    Le problème est le suivant : Lorsque je compile, il y a un problème vaec une fonction dans enet\win32.c, dont voici les erreurs :

    obj\Debug\enet\win32.o:: In function `enet_socket_send':
    D:\WoS Realm Server\enet\win32.c:193: undefined reference to `WSASendTo@36'
    obj\Debug\enet\win32.o:: In function `enet_socket_receive':
    D:\WoS Realm Server\enet\win32.c:223: undefined reference to `WSARecvFrom@36'
    :: === Build finished: 2 errors, 0 warnings ===


    Le code C++ associé :
    Première erreur :
    1. if (WSASendTo (socket,
    2.                    (LPWSABUF) buffers,
    3.                    (DWORD) bufferCount,
    4.                    & sentLength,
    5.                    0,
    6.                    address != NULL ? (struct sockaddr *) & sin : 0,
    7.                    address != NULL ? sizeof (struct sockaddr_in) : 0,
    8.                    NULL,
    9.                    NULL) == SOCKET_ERROR)
    10.     {
    11.        if (WSAGetLastError () == WSAEWOULDBLOCK)
    12.          return 0;
    13.        return -1;
    14.     }


    deuxième erreur :

    1. if (WSARecvFrom (socket,
    2.                      (LPWSABUF) buffers,
    3.                      (DWORD) bufferCount,
    4.                      & recvLength,
    5.                      & flags,
    6.                      address != NULL ? (struct sockaddr *) & sin : NULL,
    7.                      address != NULL ? & sinLength : NULL,
    8.                      NULL,
    9.                      NULL) == SOCKET_ERROR)
    10.     {
    11.        switch (WSAGetLastError ())
    12.        {
    13.        case WSAEWOULDBLOCK:
    14.        case WSAECONNRESET:
    15.           return 0;
    16.        }
    17.        return -1;
    18.     }


    Il me semble bien que j'ai linké les libraries (WinSock2 en l'occurence, j'ai linké WSock32.lib et WS2_32.lib), j'ai bien mis #include <WinSock2.h> avant l'inclusion de la librarie enet...

    Mais là je bloque, une idée ?

    |Résolu| J'ai finalement trouvé la solution moi même. J'utilise Code::Blocks, et en supprimant tous les fichiers du projet et en les remettant, ca a fini par fonctionner. Voilà cette astuce pourrait servir à d'autres...

    Et bien non, j'ai toujours un problème. J'ai réussi a linker la librarie, mais un problème subsiste, voici mon code :

    1. /****************************************
    2. * Realmserver
    3. *****************************************/
    4. #include <stdlib.h>
    5. #include <stdio.h>
    6. #include <string>
    7. #include <IRR/irrlicht.h>
    8. #include <WinSock2.h>
    9. #include <enet/enet.h>
    10. #include <irrNet/irrNet.h>
    11. #define _REALMSERVER_PORT   14400
    12. using namespace std;
    13. using namespace irr;
    14. using namespace net;
    15. class myPacketHandler :
    16.             public irr::net::PacketHandler
    17. {
    18. public:
    19.     myPacketHandler(){};
    20.     virtual ~myPacketHandler(void){};
    21.     virtual void Handle(irr::net::InPacket * packet);
    22. private:
    23.         c8 packetid;    // This is a single 8-bit char for storing the packet id.
    24. };
    25. //! animates the scene node
    26. void myPacketHandler::Handle(irr::net::InPacket * packet)
    27. {
    28.         packet->getNextItem(packetid);
    29.         vector3df newVel;
    30. }
    31. int main()
    32. {
    33.     cout    << "******************" << endl
    34.             << "War of Shattrith - Realm server" << endl
    35.             << "******************" << endl;
    36.     cout    << "Initialisation :" << endl
    37.             << "    Preparation du packetHandler et creation du INetManager... ";
    38.     myPacketHandler *handler = new myPacketHandler();
    39.     irr::net::INetManager* NetManager = irr::net::createNetManager(handler);
    40.     cout    << "Success." << endl
    41.             << "Lancement du setUpServer (port " << _REALMSERVER_PORT << ")... ";
    42.     NetManager->setUpServer(14450);
    43.     cout    << "Success." << endl;
    44.     delete handler;
    45.     delete NetManager;
    46.     return 0;
    47. }


    Je sais, c'est bordéllique. Mais c'est un entraînement seulement.
    Voici les erreurs :
    obj\Debug\main.o:: In function `main':
    D:\WoS Realm Server\main.cpp:67: undefined reference to `irr::net::createNetManager(irr::net::PacketHandler*)'
    D:\WoS Realm Server\main.cpp:72: undefined reference to `irr::net::INetManager::setUpServer(int)'
    obj\Debug\main.o:: In function `ZN15myPacketHandlerD1Ev':
    D:\WoS Realm Server\main.cpp:(.text$_ZN15myPacketHandlerC1Ev[__ZN15myPacketHandlerC1Ev]+0xd):: undefined reference to `irr::net::PacketHandler::PacketHandler()'
    :: === Build finished: 3 errors, 0 warnings ===


    Je ne comprend pas là... Les .h sont inclus, le namespace est reconnu, mais niet...
    Dans mon projet code::blocks, j'ai uniquement le main.cpp
    • Partager sur Facebook
    • Partager sur Twitter

    Problème avec IrrNetLite

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown