error LNK2019
-
hi leute
diese fehlermeldungenen bringt mir microsoft visual c++ express edition wenn ich meinen server compilern will:
Linking...
server2.obj : error LNK2019: unresolved external symbol _WSACleanup@0 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _closesocket@4 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _send@16 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _recv@16 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _accept@12 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _listen@8 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _bind@12 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _htons@4 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _WSAGetLastError@0 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _socket@12 referenced in function _main
server2.obj : error LNK2019: unresolved external symbol _WSAStartup@8 referenced in function "int __cdecl startWinsock(void)" (?startWinsock@@YAHXZ)
C:\Dokumente und Einstellungen\Albert\Eigene Dateien\Programmieren\server client\server2\Debug\server2.exe : fatal error LNK1120: 11 unresolved externalslaut google muss ich irgendwo was einbinden ich weiß aber nicht wo und was
weiß jmd genaueres ?
danke schon mal
Albert
-
hast du die Libs für sockets includiert?
Mfg Ominion
-
Spontan würde ich sagen, du mußt die ws2_32.lib hinzulinken.
Allerdings wundert mich, daß der Compiler die Namen offenbar in C++-Manier dekoriert. Wenn die Funktionen als extern "C" definiert sind (was in winsock2.h aber der Fall ist), dürfte das eigentlich nicht passieren...
-
@Ominion
Folgende Librarys sind includiert:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <winsock2.h>@audacia
Wie kann ich ws2_32.lib einbinden? (project -> properties -> ???)
-
Also Librarys sind immer die mit .lib am Ende das was du meintest sind Header. Und eigentlich wenn du ein Projekt erstellt hast unter Projekt einstellungen müsste das irgendwo gehen.
Mfg Ominion
-
albertk13 schrieb:
Wie kann ich ws2_32.lib einbinden? (project -> properties -> ???)
Ich habe gerade nur Turbo C++ installiert, für VC muß dir die Frage jemand anders beantworten. Jedenfalls geht es entweder in den Projektoptionen, oder du fügst die Library einfach dem Projekt hinzu.
-
probiere es mal mit:
#pragma (lib, "ws2_32.lib");Mfg Ominion
-
Unschön, weil unnötigerweise compilerabhängig...
-
ist aber besser als gar nichts...also, probiere es, gebe dich damit aber nicht zufrieden^^
MFg Ominion
-
#pragma (lib, "ws2_32.lib");
funktioniert nicht bringt immer noch die gleichen wahrnungen
gibt es nicht eine andere möglichkeit eine library in ein programm einzubinden?
oder kann es sein das ich diese nicht auf der festplatte habe ( mit suchen werden mir aber mehrere angezeigt)
-
Hallo
Du kannst lib auch in den Projekteigenschaften einbinden. Bei VS unter zusätzliche Abhängigikeiten.
chrische
-
audacia schrieb:
Allerdings wundert mich, daß der Compiler die Namen offenbar in C++-Manier dekoriert. Wenn die Funktionen als extern "C" definiert sind (was in winsock2.h aber der Fall ist), dürfte das eigentlich nicht passieren...
Hast du evtl. in der Headerdatei irgendetwas verändert? Oder gar irgendwo ein "#undef __cplusplus" stehen?
Ansonsten zeig mal ein wenig Code...
-
Das ist jetzt der komplette code:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <winsock2.h>
#pragma (lib, "ws2_32.lib"); // hilft nichts
using namespace std;//Prototypen
int startWinsock(void);int main(int argc, _TCHAR* argv[])
{
long rc;
SOCKET acceptSocket;
SOCKET connectedSocket;
SOCKADDR_IN addr;
char buf[256];
char buf2[300];// Winsock starten
rc=startWinsock();
if(rc!=0)
{
cout << "Fehler: startWinsock, fehler code:" << rc ;
return 1;
}
else
{
cout << "winsock gestartet";
}// Socket erstellen
acceptSocket=socket(AF_INET,SOCK_STREAM,0);
if(acceptSocket==INVALID_SOCKET)
{
cout << "Fehler: Der Socket konnte nicht erstellt werden, fehler code: " << WSAGetLastError();
return 1;
}
else
{
cout << "Socket erstellt!";
}// Socket binden
memset(&addr,0,sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(12345);
addr.sin_addr.s_addr=INADDR_ANY;
rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
if(rc==SOCKET_ERROR)
{
cout << "Fehler: bind, fehler code: " << WSAGetLastError();
return 1;
}
else
{
cout << "Socket an port 12345 gebunden\n";
}// In den listen Modus
rc=listen(acceptSocket,10);
if(rc==SOCKET_ERROR)
{
cout << "Fehler: listen, fehler code: " << WSAGetLastError();
return 1;
}
else
{
cout << "acceptSocket ist im listen Modus....\n";
}// Verbindung annehmen
connectedSocket=accept(acceptSocket,NULL,NULL);
if(connectedSocket==INVALID_SOCKET)
{
cout << "Fehler: accept, fehler code: \n" << WSAGetLastError();
return 1;
}
else
{
cout << "Neue Verbindung wurde akzeptiert!\n";
}// Daten austauschen
while(rc!=SOCKET_ERROR)
{
rc=recv(connectedSocket,buf,256,0);
if(rc==0)
{
cout << "Server hat die Verbindung getrennt..\n";
break;
}
if(rc==SOCKET_ERROR)
{
cout << "Fehler: recv, fehler code: %d\n" << WSAGetLastError();
break;
}
buf[rc]='\0';
cout << "Client sendet: \n" << buf;
sprintf(buf2,"Du mich auch %s",buf);
rc=send(connectedSocket,buf2,strlen(buf2),0);
}
closesocket(acceptSocket);
closesocket(connectedSocket);
WSACleanup();
return 0;
}int startWinsock(void)
{
WSADATA wsa;
return WSAStartup(MAKEWORD(2,0),&wsa);
}an der header datei hab ich nichts verändert!!
@chrische5 Falls du 'project -> properties -> ???' meinst könntest du mir das genauer beschreiben weil ich mich da nicht besonders auskenne