Windows 套接字封装 - 无法解析的外部符号
Windows Socket Encapsulation - Unresolved external symbol
我正在学习 winsockets,在构造函数中调用 socket(af, type, protocol)
函数时出现链接器错误。
main.cpp
#include "Server.h"
int main(int argc, char **argv) {
nmd::Server *server = new nmd::Server();
//TODO: Logic
delete server;
server = nullptr;
return 0;
}
Server.h
#pragma once
#include <WinSock2.h>
#include <WS2tcpip.h>
namespace nmd {
class Server {
public:
Server();
virtual ~Server();
private:
SOCKET socket_;
};
}
Server.cpp
#include "Server.h"
nmd::Server::Server() {
socket_ = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == socket_)
throw 1; // TODO: proper exception handling
}
nmd::Server::~Server() {}
当我尝试构建它时,出现未解决的外部符号错误。详细:
LNK2019 unresolved external symbol __imp__socket@12 referenced in function "public: __thiscall nmd::Server::Server(void)" (??0Server@nmd@@QAE@XZ)
我在这里错过了什么?我想知道这个问题的根源,而不仅仅是解决方案。当我将 socket(...)
函数放入其中时,是什么让编译器相信 nmd::Server::Server()
未定义?
请检查将套接字初始化放在初始化程序列表中时是否有效:
nmd::Server::Server(): socket_(AF_INET, SOCK_STREAM, IPPROTO_TCP)
{
if (INVALID_SOCKET == socket_)
throw 1; // TODO: proper exception handling
}
您需要将 Ws2_32.lib
添加到您的链接器命令以解析该函数。
我正在学习 winsockets,在构造函数中调用 socket(af, type, protocol)
函数时出现链接器错误。
main.cpp
#include "Server.h"
int main(int argc, char **argv) {
nmd::Server *server = new nmd::Server();
//TODO: Logic
delete server;
server = nullptr;
return 0;
}
Server.h
#pragma once
#include <WinSock2.h>
#include <WS2tcpip.h>
namespace nmd {
class Server {
public:
Server();
virtual ~Server();
private:
SOCKET socket_;
};
}
Server.cpp
#include "Server.h"
nmd::Server::Server() {
socket_ = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == socket_)
throw 1; // TODO: proper exception handling
}
nmd::Server::~Server() {}
当我尝试构建它时,出现未解决的外部符号错误。详细:
LNK2019 unresolved external symbol __imp__socket@12 referenced in function "public: __thiscall nmd::Server::Server(void)" (??0Server@nmd@@QAE@XZ)
我在这里错过了什么?我想知道这个问题的根源,而不仅仅是解决方案。当我将 socket(...)
函数放入其中时,是什么让编译器相信 nmd::Server::Server()
未定义?
请检查将套接字初始化放在初始化程序列表中时是否有效:
nmd::Server::Server(): socket_(AF_INET, SOCK_STREAM, IPPROTO_TCP)
{
if (INVALID_SOCKET == socket_)
throw 1; // TODO: proper exception handling
}
您需要将 Ws2_32.lib
添加到您的链接器命令以解析该函数。