C++ 未解析的外部符号 LNK2019

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/16948064/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-27 20:46:32  来源:igfitidea点击:

Unresolved external symbol LNK2019

c++visual-studiolinkerlinker-errorsunresolved-external

提问by Iowa15

First of all, I know this question is all over this site but I have looked at almost all of them and can't seem to find out what is wrong. This is in VS 2012. Thanks.

首先,我知道这个问题在这个网站上到处都是,但我已经查看了几乎所有的问题,但似乎无法找出问题所在。这是在 VS 2012 中。谢谢。

//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 );
};

Here's Socket.cpp

这是 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] = '
#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"
'; 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); } }

And here's stdafx.h

这是 stdafx.h

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 ==========

And here are my error messages:

这是我的错误消息:

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

回答by drescherjm

The problem is you are not linking against the Ws2_32.lib library. To fix this you can add that to your additional dependencies tab of linker/Input settings for your project. Alternatively (as pointed out by SChepurin in the comments) you can add

问题是您没有链接 Ws2_32.lib 库。要解决此问题,您可以将其添加到项目的链接器/输入设置的附加依赖项选项卡中。或者(正如 Schepurin 在评论中指出的那样)您可以添加

##代码##

to a source file of your project.

到项目的源文件。

回答by eliasetm

Another way is that click right in your project in visual studio and go to following path and add "Ws2_32.lib" in that. Linker>Input> Additional Dependencies

另一种方法是在visual studio中的项目中单击右键,然后转到以下路径并在其中添加“Ws2_32.lib”。链接器>输入>附加依赖项

enter image description here

在此处输入图片说明

回答by yoel halb

Add runtimeobject.libto the linker Additional Dependencies(in the project property page, under Linker->Input).

添加runtimeobject.lib到链接器附加依赖项(在项目属性页中,在Linker-> Input 下)。