Partage
  • Partager sur Facebook
  • Partager sur Twitter

undefined reference to `socket@12'

J'ai pourtant inclu winsock2.h !

Sujet résolu
    4 novembre 2006 à 15:05:05

    Bonjour,
    j'ai commencé à m'intéresser au réseaux en suivant ce tuto : Lien et j'ai créé ce programme pour m'entrainer qui affiche les messages qui reçoit.

    J'utilise CodeBlocks.

    Malheureusement lors de la compilation, j'ai plusieurs undefined reference :
    Switching to target: default
    Compiling: main.c
    Linking console executable: F:\Mes documents\programme\serveur\serveur.exe
    .objs\main.o:main.c:(.text+0x45): undefined reference to `WSAStartup@8'
    .objs\main.o:main.c:(.text+0x54): undefined reference to `htonl@4'
    .objs\main.o:main.c:(.text+0x72): undefined reference to `htons@4'
    .objs\main.o:main.c:(.text+0x98): undefined reference to `socket@12'
    .objs\main.o:main.c:(.text+0xc1): undefined reference to `bind@12'
    .objs\main.o:main.c:(.text+0xda): undefined reference to `listen@8'
    .objs\main.o:main.c:(.text+0x149): undefined reference to `accept@12'
    .objs\main.o:main.c:(.text+0x183): undefined reference to `recv@16'
    .objs\main.o:main.c:(.text+0x1d3): undefined reference to `closesocket@4'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 1 seconds)


    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #include <string.h>
    #pragma comment(lib, "ws2_32.lib")
    int main(int argc, char* argv[])
    {
    WSADATA WSAData;
    WSAStartup(MAKEWORD(2,0), &WSAData);

    SOCKET sock;
    SOCKADDR_IN sin;
    sin.sin_addr.s_addr = htonl(INADDR_ANY);
    sin.sin_family    = AF_INET;
    sin.sin_port        = htons(4148);
    sock = socket(AF_INET,SOCK_STREAM,0);
    bind(sock, (SOCKADDR *)&sin, sizeof(sin));

    listen(sock, 0);
    int val = 0;
    int continuer = 1;
    char buff[255] = {0};
    int taille = sizeof(sin);
    //int pointeurtaille =

    while(continuer)
    {
    val = accept(sock, (SOCKADDR *)&sin, &taille);
    if(val != INVALID_SOCKET)
    {

        recv(sock, buff, sizeof(buff), 0);

        if(strcmp(buff, "stop") == 0)
        {
        continuer = 0;
        }
        printf("%s \n", buff);




    }
    }

    closesocket(sock);
    return EXIT_SUCCESS;
    }


    Merci à vous !
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      4 novembre 2006 à 15:10:47

      Il faut que tu link la bibliothèque libwsock32.a a ton exécutable !
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        4 novembre 2006 à 15:19:56

        Oui car pragma le fait pas ou "mal" ,c'est du vieux.
        Met plutôt ws2_32.lib dans les options de ton linker
        • Partager sur Facebook
        • Partager sur Twitter
          4 novembre 2006 à 15:23:25

          Citation : simon.arvaux

          Il faut que tu link la bibliothèque libwsock32.a a ton exécutable !


          Pour MinGW.

          Ou ws2_32.lib pour Visual Studio 2005.
          • Partager sur Facebook
          • Partager sur Twitter
            4 novembre 2006 à 15:53:00

            Citation : tutur19

            J'utilise CodeBlocks.


            linke avec libwsock32.a

            #include <stdio.h>
            #include <stdlib.h>
            #include <winsock2.h>
            #include <string.h>
            #pragma comment(lib, "ws2_32.lib")
            int main(int argc, char* argv[])
            {
            WSADATA WSAData;
            WSAStartup(MAKEWORD(2,0), &WSAData);

            SOCKET sock;
            SOCKADDR_IN sin;
            sin.sin_addr.s_addr = htonl(INADDR_ANY);
            sin.sin_family    = AF_INET;
            sin.sin_port        = htons(4148);
            sock = socket(AF_INET,SOCK_STREAM,0);
            bind(sock, (SOCKADDR *)&sin, sizeof(sin));

            listen(sock, 0);
            int val = 0;
            int continuer = 1;
            char buff[255] = {0};
            int taille = sizeof(sin);
            //int pointeurtaille =

            while(continuer)
            {
            val = accept(sock, (SOCKADDR *)&sin, &taille);
            if(val != INVALID_SOCKET)
            {

                recv(sock, buff, sizeof(buff), 0);

                if(strcmp(buff, "stop") == 0)
                {
                continuer = 0;
                }
                printf("%s \n", buff);




            }
            }

            closesocket(sock);
            return EXIT_SUCCESS;
            }

            </citation>
            j'imagine que tu es entrai de lire ca : http://c.developpez.com/WalrusSock/
            ??

            • Partager sur Facebook
            • Partager sur Twitter
              4 novembre 2006 à 16:38:28

              Code::Blocks->Settings->Compiler->Linker->Other linker options: => "-lws2_32";
              • Partager sur Facebook
              • Partager sur Twitter
                4 novembre 2006 à 16:39:59

                Merci, je n'ai plus de problème de compilation mais bizzarement le programme n'affiche pas le texte qu'il reçoit, il saute une ligne mais n'affiche pas le message... Vous avez une idée ?
                • Partager sur Facebook
                • Partager sur Twitter
                  4 novembre 2006 à 16:44:26

                  Citation : Davidbrcz

                  Oui car pragma le fait pas ou "mal" ,c'est du vieux.


                  C'est pas 'vieux', mais c'est surtout pas portable...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    4 novembre 2006 à 21:21:10

                    ou alors si t'as visual studio, y'a
                    #pragma comment(lib,"ws2_32.lib")
                    Qui devrait marcher.
                    ou linker le prog contre ws2_32.lib

                    Avec dev-Cpp il faut aller dans Projet --> Option de projet --> Paramètres --> Sous linker il faut presser sur rajout Objet/Lib --> Dossier lib et selectionner libws2_32.a
                    • Partager sur Facebook
                    • Partager sur Twitter

                    undefined reference to `socket@12'

                    × 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