c++ visual-studio linker linker-errors unresolved-external

c++ - Símbolo externo no resuelto LNK2019



visual-studio linker (1)

El problema es que no está enlazando con la biblioteca Ws2_32.lib. Para solucionarlo, puede agregarlo a la pestaña de dependencias adicionales de la configuración de Enlazador / Entrada para su proyecto. Alternativamente (como lo señala SChepurin en los comentarios) puede agregar

#pragma comment(lib, "Ws2_32.lib")

a un archivo fuente de su proyecto.

Antes que nada, sé que esta pregunta está en todo este sitio, pero he examinado casi todos y parece que no puedo descubrir qué está mal. Esto es en VS 2012. Gracias.

//Socket.h #pragma once #include <iostream> #include <WinSock2.h> using namespace std; const int STRLEN = 256; class Socket { protected: WSADATA wsaData; SOCKET mySocket; SOCKET myBackup; SOCKET acceptSocket; sockaddr_in myAddress; public: Socket(); ~Socket(); bool SendData( char* ); bool RecvData( char*, int ); void CloseConnection(); void GetAndSendMessage(); }; class ServerSocket : public Socket { public: void Listen(); void Bind( int port ); void StartHosting( int port ); }; class ClientSocket : public Socket { public: void ConnectToServer( const char *ipAddress, int port ); };

Aquí está Socket.cpp

//Socket.cpp #include "stdafx.h" #include "Socket.h" Socket::Socket() { if( WSAStartup( MAKEWORD(2, 2), &wsaData ) != NO_ERROR ) { cerr<<"Socket Initialization: Error with WSAStartup/n"; system("pause"); WSACleanup(); exit(10); } //Create a socket mySocket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); if ( mySocket == INVALID_SOCKET ) { cerr<<"Socket Initialization: Error creating socket"<<endl; system("pause"); WSACleanup(); exit(11); } myBackup = mySocket; } Socket::~Socket() { WSACleanup(); } bool Socket::SendData( char *buffer ) { send( mySocket, buffer, strlen( buffer ), 0 ); return true; } bool Socket::RecvData( char *buffer, int size ) { int i = recv( mySocket, buffer, size, 0 ); buffer[i] = ''/0''; return true; } void Socket::CloseConnection() { //cout<<"CLOSE CONNECTION"<<endl; closesocket( mySocket ); mySocket = myBackup; } void Socket::GetAndSendMessage() { char message[STRLEN]; cin.ignore();//without this, it gets the return char from the last cin and ignores the following one! cout<<"Send > "; cin.get( message, STRLEN ); SendData( message ); } void ServerSocket::StartHosting( int port ) { Bind( port ); Listen(); } void ServerSocket::Listen() { //cout<<"LISTEN FOR CLIENT..."<<endl; if ( listen ( mySocket, 1 ) == SOCKET_ERROR ) { cerr<<"ServerSocket: Error listening on socket/n"; system("pause"); WSACleanup(); exit(15); } //cout<<"ACCEPT CONNECTION..."<<endl; acceptSocket = accept( myBackup, NULL, NULL ); while ( acceptSocket == SOCKET_ERROR ) { acceptSocket = accept( myBackup, NULL, NULL ); } mySocket = acceptSocket; } void ServerSocket::Bind( int port ) { myAddress.sin_family = AF_INET; myAddress.sin_addr.s_addr = inet_addr( "0.0.0.0" ); myAddress.sin_port = htons( port ); //cout<<"BIND TO PORT "<<port<<endl; if ( bind ( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress) ) == SOCKET_ERROR ) { cerr<<"ServerSocket: Failed to connect/n"; system("pause"); WSACleanup(); exit(14); } } void ClientSocket::ConnectToServer( const char *ipAddress, int port ) { myAddress.sin_family = AF_INET; myAddress.sin_addr.s_addr = inet_addr( ipAddress ); myAddress.sin_port = htons( port ); //cout<<"CONNECTED"<<endl; if ( connect( mySocket, (SOCKADDR*) &myAddress, sizeof( myAddress ) ) == SOCKET_ERROR ) { cerr<<"ClientSocket: Failed to connect/n"; system("pause"); WSACleanup(); exit(13); } }

Y aquí está stdafx.h

#pragma once #include "targetver.h" #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers // Windows Header Files: #include <windows.h> // C RunTime Header Files #include <stdlib.h> #include <malloc.h> #include <memory.h> #include <tchar.h> // TODO: reference additional headers your program requires here #include "Socket.h"

Y aquí están mis mensajes de error:

1>------ Build started: Project: Client, Configuration: Debug Win32 ------ 1> stdafx.cpp 1> Socket.cpp 1> Client.cpp 1> Generating Code... 1>Socket.obj : error LNK2019: unresolved external symbol __imp__accept@12 referenced in function "public: void __thiscall ServerSocket::Listen(void)" (?Listen@ServerSocket@@QAEXXZ) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__bind@12 referenced in function "public: void __thiscall ServerSocket::Bind(int)" (?Bind@ServerSocket@@QAEXH@Z) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__closesocket@4 referenced in function "public: void __thiscall Socket::CloseConnection(void)" (?CloseConnection@Socket@@QAEXXZ) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__connect@12 referenced in function "public: void __thiscall ClientSocket::ConnectToServer(char const *,int)" (?ConnectToServer@ClientSocket@@QAEXPBDH@Z) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__htons@4 referenced in function "public: void __thiscall ServerSocket::Bind(int)" (?Bind@ServerSocket@@QAEXH@Z) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__inet_addr@4 referenced in function "public: void __thiscall ServerSocket::Bind(int)" (?Bind@ServerSocket@@QAEXH@Z) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__listen@8 referenced in function "public: void __thiscall ServerSocket::Listen(void)" (?Listen@ServerSocket@@QAEXXZ) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__recv@16 referenced in function "public: bool __thiscall Socket::RecvData(char *,int)" (?RecvData@Socket@@QAE_NPADH@Z) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__send@16 referenced in function "public: bool __thiscall Socket::SendData(char *)" (?SendData@Socket@@QAE_NPAD@Z) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__socket@12 referenced in function "public: __thiscall Socket::Socket(void)" (??0Socket@@QAE@XZ) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__WSAStartup@8 referenced in function "public: __thiscall Socket::Socket(void)" (??0Socket@@QAE@XZ) 1>Socket.obj : error LNK2019: unresolved external symbol __imp__WSACleanup@0 referenced in function "public: __thiscall Socket::Socket(void)" (??0Socket@@QAE@XZ) 1>C:/Users/ajayp_000/documents/visual studio 2012/Projects/Client/Debug/Client.exe : fatal error LNK1120: 12 unresolved externals ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========