Linker Error
-
Ich habe eine neue Win32-Konsolenanwendung erstellt und und nutze ausschließlich Funktionen der WinAPI darin (erstelle Threads und baue ne Socketverbindung auf, habe die inlcudes (nach meinem Wissen) richtig gesetzt, aber bekomm trotzdem nix kompiliert
Weiß nicht, woran es genau liegen könnte, ich poste einfach ma so in etwa alles, was ich habe ^^
Fehlermeldungen:Dahlia_Konsole_new.cpp
Verknüpfen...
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__recv@16".
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__send@16".
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__accept@12".
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAGetLastError@0".
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__listen@8".
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__bind@12".
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__htons@4".
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__socket@12".
Dahlia_Konsole_new.obj : error LNK2001: Nicht aufgelöstes externes Symbol "__imp__WSAStartup@8".
C:\Users\Tommy\CODEN\Dahlia_Konsole_new\Debug\Dahlia_Konsole_new.exe : fatal error LNK1120: 9 nicht aufgelöste externe Verweise.main-datei:
// Dahlia_Konsole_new.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung. #include "stdafx.h" #include <iostream> #include "includes.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char *eingabe = new char; do { cin >> eingabe; cout << endl; } while (strcmp(eingabe, "quit")); cout << "beenden."; return 0; }
include.h:
#define state_hell -4 #define state_code -3 #define state_vers -2 #define state_nick -1 #define state_loggedon 0 #define state_online 4 #define state_busy 3 #define state_away 1 #define state_lunch 2 #include <process.h> #include <winsock2.h> #include "sock.h"
sock.h
const signed __int16 t1_size = 1024; const signed __int16 t2_size = 8192; const signed __int32 l = 256; //litte buffer const signed __int32 maxl = 3072; //real buffer void waitforanswer (void *socket) { send ((SOCKET) socket, "AUTH |END|", 10, NULL); signed __int8 state = state_hell; char buffer[maxl]; memset(buffer, 0, maxl); do { char buf[l]; signed __int16 event = recv ((SOCKET) socket, (char *) memset (buf, 0, l), l-1, NULL); if ((event == 0) || (event == -1)) { printf ("%d%s%s", (signed __int16) socket, ": disconnect", "\r\n"); _endthread(); } else if ((event == WSAEMSGSIZE) && (strlen(buffer) - l < maxl)) { if (state > state_loggedon) { sprintf_s (buffer, maxl, "%s%s", buffer, buf); do { memset(buf, 0, l); event = recv ((SOCKET) socket, buf, l-1, NULL); } while (event == WSAEMSGSIZE); } else { _endthread(); } } if (state < state_loggedon) { printf("%d: %s%s", (signed __int16) socket, buf, "\r\n"); } //if (state < state_loggedon) else //richtige Cmds { sprintf_s (buffer, maxl, "%s%s", buffer, buf); printf("%d: %s%s", (signed __int16) socket, buffer, "\r\n"); char cmd[5]; cmd[0] = buffer[0]; cmd[1] = buffer[1]; cmd[2] = buffer[2]; cmd[3] = buffer[3]; cmd[4] = 0; } } while (true); }; void dosock (void *nothing) { WORD version = MAKEWORD (2, 2); WSADATA wsadata; WSAStartup (version, &wsadata); //damit man Sockets nutzen kann SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); //der acceptsocket (IPv4, stream, TCP Protokol) SOCKADDR_IN addr; //struct für socketdaten memset (&addr, 0, sizeof(SOCKADDR_IN)); //gesamte Struktur mit Nullen überschreiben addr.sin_family = AF_INET; //TCP/IP addr.sin_port = htons(7576); //Port addr.sin_addr.s_addr = ADDR_ANY; //IPs, die connecten dürfen bind (sock, (SOCKADDR*) &addr, sizeof(SOCKADDR_IN)); //der "richtige" Socket - wird mit den in addr festgelegten Parametern erstellt while (true) { if (SOCKET_ERROR == listen (sock, 10)) //auf eine Verbindung warten - und die maximal ausstehenden Verbindungen auf 10 setzen { std::cout << WSAGetLastError << std::endl; break; } SOCKET csock = accept (sock, NULL, NULL); //akzeptiert Verbindung - userDaten werden im zweiten/dritten Parameter gespeichert (siehe bind) _beginthread (waitforanswer, t2_size, (void *) csock); }; };
wie ihr seht, erstell ich die threads noch nicht mal - hab nur die Funktionen und trotzdem... :o(
Danke im Voraus (btw ich kenn mich 0 mit VS aus - nur mit bcb, hab erst vorhin angefangen mit VS zu coden - aber denke, ich bin zumindest in C/C++ nicht mehr der vollboon...
Tom
-
Link doch mal die Winsock-lib mit...
-
Danke