Linker error

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von myth2806, 12. September 2006 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 12. September 2006
    Hi leutz,

    also wie man es schon aus dem Titel lesen kann habe ich ein problem mit dem linken meines kleinen c-projektes. das programm soll einen einfache verbindung zu einem server herstellen und dann ausgaben was der server "antwortet".
    Als error erhalte ich immer dies hier:

    Bild=down!

    hier ist der src meines programms:

    Code:
    #include <stdio.h>
    #include <sys/types.h>
    #include <winsock2.h>
    
    #define BUFFER_SIZE 1024
    
    int main()
    {
     SOCKADDR_IN addr;
     
     struct sockaddr_in 
     {
     short sin_family;
     unsigned short sin_port;
     struct in_addr sin_addr;
     char sin_zero[0];
     };
     
     struct sockaddr_in srv;
     int sock, c, bytes;
     char buffer[BUFFER_SIZE];
     
     sock = socket(AF_INET, SOCK_STREAM, 0);
     if (sock==-1)
     {
     perror("Konnte keinen Socket erstellen\n");
     exit(0);
     }
     
     srv.sin_addr.s_addr = inet_addr("127.0.0.1");
     srv.sin_port = 70;
     srv.sin_family = AF_INET;
     
     c = connect(sock, (SOCKADDR*)&srv, sizeof(srv));
     
     if (c==-1)
     {
     perror("Konnte keine Verbindung zum Server herstellen.\n");
     exit(0);
     }
     
     bytes = recv(sock, buffer, sizeof(buffer)-1, 0);
     if(bytes=-1)
     {
     perror("Konnte vom Socket nicht lesen.\n");
     }
     
     // buffer[bytes] = "\0";
     
     printf("\nAusgabe: %s\n\n", buffer);
     
     return 0;
    }
    
    greez myth
     
  2. 12. September 2006
    AW: Linker error

    Hi,

    du musst die ws2_32.lib ( und die wsock32.lib ) einbinden.

    Solltest du es unter Bloodshed dev cpp compilieren, benutze Dev-Cpp\libs\libws2_32.a und libwsock32.a.

    Ausserdem musst du unter Windows Winsock erst initalisieren. Zudem ist ein Socket unter Windows nicht int, sondern SOCKET.

    Du musst includen:
    Code:
    <windows.h>
    <winsock.h>
    <winsock2.h>
    <io.h>
    Code:
    <sys/types.h>
    brauchst du nicht und gibt es auch gar nicht ?!

    Mfg,

    Kolazomai
     
  3. 12. September 2006
    AW: Linker error

    thx für die schnelle antwort schon mal,

    also ja ich verwende den dev-cpp compiler,
    jetzt hab ich allerdings die frage wie ich die beiden *.a-dateien includen soll...
    ich habs mit #include <> versucht aber dann brauch er ganz lange zum compilen und gibt dann einen riesen berg fehler aus.

    und die datei sys/types.h gibt es. in dem tutorial was ich mir gerade durchlese um die socket-programmierung zu lernen steht es drinnen aber ok.

    thx schonmal.

    greez myth
     
  4. 12. September 2006
    AW: Linker error

    vielleicht hilt dir das tut weiter!!

    c-worker.ch - Winsock Tutorials / C++ / Php Text DB API da unter unter tuts
     
  5. 12. September 2006
    AW: Linker error

    Du musst die beim linken einbinden.

    Such einfach mal, wie man bei deinem Compiler Libraries einbinden kann.

    Die Libraries heissen
    Code:
    ws2_32.lib
    wsock2.lib
    wobei ich mir beim letzteren ned sicher bin.

    Das sollte nicht allzuschwer sein...

    Mfg,

    Kolazomai
     
  6. 13. September 2006
    AW: Linker error

    Es reicht auch das Einbinden der Windows Header ,,windows.h''.
    Und wie bereits gesagt, das Einbinden des Headers ,,sys/types.h'' ist Quatsch.
     
  7. 13. September 2006
    AW: Linker error

    Wenn du wissen wuerdest, wie ein Linker funktioniert, wuerdest du wissen, dass es (in diesem Fall) mit dem includen einer .h nicht getan sein sollte.

    Ein Linker ( wie der Name schon sagt ) linkt die Objekt-Dateien ( .o ) zu einer ausfuehrbaren ( Binary )-Datei zusammen. Undefined Reference bedeutet nun, dass er in keinem der Objekt-Dateien die Funktion, auf die er keine Referenz hat, finden konnte. Die ws2_32.lib, die nicht OpenSource ist ( Microsoft ), war irgendwann mal eine Sourcedatei und wurde dann zu einer Library compiliert. In dieser SourceDatei waren die Socket-Funktionen wie recv und send deklariert. Deshalb musst du die ws2_32.lib einbinden.

    Mfg,

    Kolazomai
     
  8. 13. September 2006
    AW: Linker error

    in DevCpp geht das unter den Projekteigenschaften bei "Parameter" (soweit ich weiß).
    Da gibts nen Button mit "Bibliotheken hinzufügen", da dann die libws2_32.a einbinden (glaube der name stimmt so)
     
  9. 13. September 2006
    AW: Linker error

    also ich hab unter den compiler optionen und dort unter verzeichnisse die funktion gefunden ordner komplett als lib einzubinden. standartmäßig ist das das lib-verzeichniss also ist die datei auch schon mit automatisch eingebunden.

    also ich habe diese einstellung gefunden allerdings denke ich eher dass das parameter sind die an den compiler bzw linker gesendet werden. irgend eine file includen geht auch gar nicht.

    greez myth
     
  10. 13. September 2006
    AW: Linker error

    sys/types.h kannst du nur unter unix includen
     
  11. 13. September 2006
    AW: Linker error

    Hi,

    hab fuer dich mal ein Video gemacht.

    In dem schreibe ich ein kleines Programm, das zu pronix.de connected, einen 'falschen' HTTP-Request sendet und danach eine Nachricht empfaengt.

    Hier

    kannst du es downloaden. ( Achtung: Entpackt 220 MB gross ).

    Damit sollte dein Problem geloest sein.

    Mfg,

    Kolazomai
     
  12. 13. September 2006
    AW: Linker error

    OK vielen dank jetzt funktioniert es =)

    *10er am geben XD*

    greez myth


    //closed
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.