WinSock
-
Hallo
Ich probiere grade einen socket zu starten, der dann direkt wieder schließt.
Habe aus einem älteren Buch ein Beispiel. Allerdings wenn ich das compiliere bekomme ich linker fehler.**** Full rebuild of configuration Debug for project socket **** make -k clean all rm -rf ./main.o ./main.d socket.exe ' ' 'Building file: ../main.cpp' 'Invoking: GCC C++ Compiler' g++ -O0 -g3 -Wall -c -fmessage-length=0 -omain.o ../main.cpp ../main.cpp: In function `int WinSockInitialize()': ../main.cpp:20: warning: control reaches end of non-void function 'Finished building: ../main.cpp' ' ' 'Building target: socket.exe' 'Invoking: GCC C++ Linker' g++ -L"C:/Programme/eclipse2/workspace/Hello World" -osocket.exe ./main.o ./main.o(.text+0x21): In function `Z17WinSockInitializev': C:/Programme/eclipse2/workspace/socket/Debug/../main.cpp:17: undefined reference to `WSAStartup@8' ./main.o(.text+0x87): In function `main': C:/Programme/eclipse2/workspace/socket/Debug/../main.cpp:29: undefined reference to `socket@12' ./main.o(.text+0x98):C:/Programme/eclipse2/workspace/socket/Debug/../main.cpp:31: undefined reference to `WSACleanup@0' ./main.o(.text+0xac):C:/Programme/eclipse2/workspace/socket/Debug/../main.cpp:33: undefined reference to `closesocket@4' ./main.o(.text+0xb4):C:/Programme/eclipse2/workspace/socket/Debug/../main.cpp:35: undefined reference to `WSACleanup@0' collect2: ld returned 1 exit status make: *** [socket.exe] Error 1 make: Target `all' not remade because of errors. Build complete for project socket
Dies ist der Quelltext:
#include <windows.h> #include <winsock2.h> #include <stdio.h> #define RETURN_ON_ERROR(err) {\ WSACleanup();\ return (err);\ } int WinSockInitialize (void) { int err; WORD wVersionReq; WSADATA wsaData; wVersionReq = MAKEWORD (1,1); err=WSAStartup(wVersionReq, &wsaData); if (err != 0) exit (1); } int main (int argc, char **argv) { SOCKET soc; WinSockInitialize(); soc = socket ( AF_INET, SOCK_STREAM, 0); if ( soc == INVALID_SOCKET) RETURN_ON_ERROR(1); closesocket(soc); WSACleanup(); return (0); }
hoffe mir kann da jemand helfen.
ich arbeite mit eclipse und dem MinGW kompiler.
mfg
silicore
-
1. Die Funktion WinSockInitialize() benötigt noch eine "return"-Anweisung (oder du korrigierst den Rückgabewert von "int" nach "void").
2. Du mußt dem Linker noch die .obj Datei mit den Socket-Funktionen übergeben, von alleine findet der sie nicht. (dazu trägst du am Ende des zweiten Befehls den richtigen Pfad ein)
-
Die richtige libraries sind für Winsock wsock32.lib und ws2_32.lib.