这是我第一个使用winsock的程序。如您所见,我已经使用了#include <winsock2.h>和链接ws2_32.dll,但是代码仍然没有编译:
#include<winsock2.h>
#pragma comment(lib, "ws2_32")
class CInitSock{
public:
CInitSock(BYTE minorVer=2,BYTE majorVer=2){
//initialize WS2_32.dll
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer,majorVer);
if(::WSAStartup(sockVersion,&wsaData)!=0){
exit(0);
}
}
//release winSock libary
~CInitSock(){
::WSACleanup();
}
};
#include "CInitSock.h"
#include<stdio.h>
CInitSock initSock;
int main(void){
char szHost[256];
::gethostname(szHost,256);
hostent *phost = ::gethostbyname(szHost);
in_addr addr;
for(int i = 0;;i++){
char *p = phost->h_addr_list[i];
if(p==NULL){
break;
}
memcpy(&addr.S_un.S_addr,p,phost->h_length);
char *szIp = ::inet_ntoa(addr);
printf("%s \n",szIp);
}
}这是一个错误:
mingw32-make.exe -f "D:\project\c_program\Makefile.win" all
g++.exe GetAllIPs.o -o win_socket.exe -L"D:/tools/develepment/Dev-Cpp/MinGW64/x86_64- w64-mingw32/lib" -L"D:/tools/develepment/Dev-Cpp/MinGW64/lib32" -static-libgcc -mwindows -g3
GetAllIPs.o: In function `main':
D:\project\c_program/GetAllIPs.cpp:6: undefined reference to `__imp_gethostname'
D:\project\c_program/GetAllIPs.cpp:7: undefined reference to `__imp_gethostbyname'
D:\project\c_program/GetAllIPs.cpp:15: undefined reference to `__imp_inet_ntoa'
GetAllIPs.o: In function `CInitSock::CInitSock(unsigned char, unsigned char)':
D:\project\c_program/CInitSock.h:10: undefined reference to `__imp_WSAStartup'
GetAllIPs.o: In function `CInitSock::~CInitSock()':
D:\project\c_program/CInitSock.h:16: undefined reference to `__imp_WSACleanup'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe: *** [win_socket.exe] Error 1现在我完全糊涂了..。
发布于 2013-09-01 13:51:53
您使用的实用程序只适用于VisualC++编译器,并且将被gcc忽略。
#pragma comment(lib, "ws2_32")您必须在makefile中手动添加ws2_32.lib。像这样:
-L"ws2_32"(我想最后没有".lib“了)
在g++行的末尾。当然,你已经补充了我目前还没有的全部道路。
发布于 2017-12-16 12:37:22
我也遇到了同样的问题。我通过添加命令-lwsock32来解决这个问题。您可以按照以下步骤添加命令:
generaladd the following commands when calling the compilers然后可以添加上面的命令-lwsock32。
发布于 2020-10-18 16:30:55
有关wnidows下的代码块:转到
Project -> Build Options -> Linker设置(确保项目位于左侧,而不是生成目标),并在左侧列表中添加(键入)库"ws2_32“

https://stackoverflow.com/questions/18559028
复制相似问题