ws2_32.lib 引发的LNK2019问题解决办法

编译带有MongoDB c++ 驱动库的时候,出现了大量LNK2019的错误

 1 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__WSASetLastError@4,该符号在函数 _WspiapiGetNameInfo@28 中被引用
 2 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__WSASetLastError@4
 3 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__WSASetLastError@4
 4 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__inet_ntoa@4,该符号在函数 _WspiapiLegacyGetAddrInfo@16 中被引用
 5 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__inet_ntoa@4
 6 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__inet_ntoa@4
 7 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__htonl@4,该符号在函数 _WspiapiLegacyGetAddrInfo@16 中被引用
 8 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__htonl@4
 9 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__htonl@4
10 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__getservbyname@8,该符号在函数 _WspiapiLegacyGetAddrInfo@16 中被引用
11 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__getservbyname@8
12 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__getservbyname@8
13 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__htons@4,该符号在函数 _WspiapiLegacyGetAddrInfo@16 中被引用
14 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__htons@4
15 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__htons@4
16 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__inet_addr@4,该符号在函数 _WspiapiParseV4Address@8 中被引用
17 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__inet_addr@4
18 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__inet_addr@4
19 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__WSAGetLastError@0,该符号在函数 _WspiapiQueryDNS@24 中被引用
20 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__WSAGetLastError@0
21 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__WSAGetLastError@0
22 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__gethostbyname@4,该符号在函数 _WspiapiQueryDNS@24 中被引用
23 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__gethostbyname@4
24 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__gethostbyname@4
25 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__gethostbyaddr@12,该符号在函数 _WspiapiLegacyGetNameInfo@28 中被引用
26 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__gethostbyaddr@12
27 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__gethostbyaddr@12
28 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__getservbyport@8,该符号在函数 _WspiapiLegacyGetNameInfo@28 中被引用
29 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__getservbyport@8
30 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__getservbyport@8
31 1>MongoDrv.lib(dbclient.obj) : error LNK2019: 无法解析的外部符号 __imp__ntohs@4,该符号在函数 _WspiapiLegacyGetNameInfo@28 中被引用
32 1>MongoDrv.lib(message.obj) : error LNK2001: 无法解析的外部符号 __imp__ntohs@4
33 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__ntohs@4
34 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__accept@12,该符号在函数 "public: void __thiscall mongo::Listener::initAndListen(void)" (?initAndListen@Listener@mongo@@QAEXXZ) 中被引用
35 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 ___WSAFDIsSet@8,该符号在函数 "public: void __thiscall mongo::Listener::initAndListen(void)" (?initAndListen@Listener@mongo@@QAEXXZ) 中被引用
36 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__select@20,该符号在函数 "public: void __thiscall mongo::Listener::initAndListen(void)" (?initAndListen@Listener@mongo@@QAEXXZ) 中被引用
37 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__listen@8,该符号在函数 "public: void __thiscall mongo::Listener::initAndListen(void)" (?initAndListen@Listener@mongo@@QAEXXZ) 中被引用
38 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__closesocket@4,该符号在函数 "public: void __thiscall mongo::Listener::initAndListen(void)" (?initAndListen@Listener@mongo@@QAEXXZ) 中被引用
39 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__closesocket@4
40 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__bind@12,该符号在函数 "public: void __thiscall mongo::Listener::initAndListen(void)" (?initAndListen@Listener@mongo@@QAEXXZ) 中被引用
41 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__bind@12
42 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__setsockopt@20,该符号在函数 "public: void __thiscall mongo::Listener::initAndListen(void)" (?initAndListen@Listener@mongo@@QAEXXZ) 中被引用
43 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__socket@12,该符号在函数 "public: void __thiscall mongo::Listener::initAndListen(void)" (?initAndListen@Listener@mongo@@QAEXXZ) 中被引用
44 1>MongoDrv.lib(sock.obj) : error LNK2001: 无法解析的外部符号 __imp__socket@12
45 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__connect@12,该符号在函数 "public: virtual void __thiscall mongo::ConnectBG::run(void)" (?run@ConnectBG@mongo@@UAEXXZ) 中被引用
46 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__send@16,该符号在函数 "public: void __thiscall mongo::MessagingPort::send(char const *,int,char const *)" (?send@MessagingPort@mongo@@QAEXPBDH0@Z) 中被引用
47 1>MongoDrv.lib(message.obj) : error LNK2019: 无法解析的外部符号 __imp__recv@16,该符号在函数 "public: void __thiscall mongo::MessagingPort::recv(char *,int)" (?recv@MessagingPort@mongo@@QAEXPADH@Z) 中被引用
48 1>MongoDrv.lib(sock.obj) : error LNK2019: 无法解析的外部符号 __imp__sendto@24,该符号在函数 "public: int __thiscall mongo::UDPConnection::sendto(char *,int,struct mongo::SockAddr const &)" (?sendto@UDPConnection@mongo@@QAEHPADHABUSockAddr@2@@Z) 中被引用
49 1>MongoDrv.lib(sock.obj) : error LNK2019: 无法解析的外部符号 __imp__getsockopt@20,该符号在函数 "public: bool __thiscall mongo::UDPConnection::init(struct mongo::SockAddr const &)" (?init@UDPConnection@mongo@@QAE_NABUSockAddr@2@@Z) 中被引用
50 1>MongoDrv.lib(sock.obj) : error LNK2019: 无法解析的外部符号 __imp__recvfrom@24,该符号在函数 "public: int __thiscall mongo::UDPConnection::recvfrom(char *,int,struct mongo::SockAddr &)" (?recvfrom@UDPConnection@mongo@@QAEHPADHAAUSockAddr@2@@Z) 中被引用
51 1>MongoDrv.lib(sock.obj) : error LNK2019: 无法解析的外部符号 __imp__gethostname@8,该符号在函数 "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl mongo::getHostName(void)" (?getHostName@mongo@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ) 中被引用
52 1>MongoDrv.lib(sock.obj) : error LNK2019: 无法解析的外部符号 __imp__WSAStartup@8,该符号在函数 "public: __thiscall mongo::`anonymous namespace'::WinsockInit::WinsockInit(void)" (??0WinsockInit@?A0xfa0c0041@mongo@@QAE@XZ) 中被引用
问题表现

解决方法: #pragma comment(lib,"ws2_32.lib")  或在工程设置中手工链入ws2_32.lib (  工程属性->配置属性->链接器->输入->附加依赖项   添加ws2_32.lib )

两种方法都一样,但如果在代码里添加,则其他人用你的项目时就不需要手动修改工程配置了

详参: http://hi.baidu.com/story_of_water/item/7de81e3eebf61b302e20c481

ws2_32.lib:在网络编程中出现, 提供了对以下网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程(否则需要动态载入ws2_32.dll)。

  1 accept
  2 bind
  3 closesocket
  4 connect
  5 getpeername
  6 getsockname
  7 getsockopt
  8 htonl
  9 htons
 10 ioctlsocket
 11 inet_addr
 12 inet_ntoa
 13 listen
 14 ntohl
 15 ntohs
 16 recv
 17 recvfrom
 18 select
 19 send
 20 sendto
 21 setsockopt
 22 shutdown
 23 socket
 24 GetAddrInfoW
 25 GetNameInfoW
 26 WSApSetPostRoutine
 27 FreeAddrInfoW
 28 WPUCompleteOverlappedRequest
 29 WSAAccept
 30 WSAAddressToStringA
 31 WSAAddressToStringW
 32 WSACloseEvent
 33 WSAConnect
 34 WSACreateEvent
 35 WSADuplicateSocketA
 36 WSADuplicateSocketW
 37 WSAEnumNameSpaceProvidersA
 38 WSAEnumNameSpaceProvidersW
 39 WSAEnumNetworkEvents
 40 WSAEnumProtocolsA
 41 WSAEnumProtocolsW
 42 WSAEventSelect
 43 WSAGetOverlappedResult
 44 WSAGetQOSByName
 45 WSAGetServiceClassInfoA
 46 WSAGetServiceClassInfoW
 47 WSAGetServiceClassNameByClassIdA
 48 WSAGetServiceClassNameByClassIdW
 49 WSAHtonl
 50 WSAHtons
 51 gethostbyaddr
 52 gethostbyname
 53 getprotobyname
 54 getprotobynumber
 55 getservbyname
 56 getservbyport
 57 gethostname
 58 WSAInstallServiceClassA
 59 WSAInstallServiceClassW
 60 WSAIoctl
 61 WSAJoinLeaf
 62 WSALookupServiceBeginA
 63 WSALookupServiceBeginW
 64 WSALookupServiceEnd
 65 WSALookupServiceNextA
 66 WSALookupServiceNextW
 67 WSANSPIoctl
 68 WSANtohl
 69 WSANtohs
 70 WSAProviderConfigChange
 71 WSARecv
 72 WSARecvDisconnect
 73 WSARecvFrom
 74 WSARemoveServiceClass
 75 WSAResetEvent
 76 WSASend
 77 WSASendDisconnect
 78 WSASendTo
 79 WSASetEvent
 80 WSASetServiceA
 81 WSASetServiceW
 82 WSASocketA
 83 WSASocketW
 84 WSAStringToAddressA
 85 WSAStringToAddressW
 86 WSAWaitForMultipleEvents
 87 WSCDeinstallProvider
 88 WSCEnableNSProvider
 89 WSCEnumProtocols
 90 WSCGetProviderPath
 91 WSCInstallNameSpace
 92 WSCInstallProvider
 93 WSCUnInstallNameSpace
 94 WSCUpdateProvider
 95 WSCWriteNameSpaceOrder
 96 WSCWriteProviderOrder
 97 freeaddrinfo
 98 getaddrinfo
 99 getnameinfo
100 WSAAsyncSelect
101 WSAAsyncGetHostByAddr
102 WSAAsyncGetHostByName
103 WSAAsyncGetProtoByNumber
104 WSAAsyncGetProtoByName
105 WSAAsyncGetServByPort
106 WSAAsyncGetServByName
107 WSACancelAsyncRequest
108 WSASetBlockingHook
109 WSAUnhookBlockingHook
110 WSAGetLastError
111 WSASetLastError
112 WSACancelBlockingCall
113 WSAIsBlocking
114 WSAStartup
115 WSACleanup
116 __WSAFDIsSet
117 WEP
ws2_32.lib支持如下api
原文地址:https://www.cnblogs.com/elenno/p/ws2_32_lib.html