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 🤡


Anmelden zum Antworten