0
我試圖創建一個真正基本的客戶端應用程序,基於msdn上的代碼,但我得到了標題中的錯誤。 下面是完整的代碼:隱式聲明的函數'getaddrinfo'與Mingw的Windows
#include <tchar.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <windows.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment (lib, "Ws2_32.lib")
#define DEBUG 1
#define DEFAULT_BUFLEN 512
#define DEFAULT_PORT "9001"
void CreateSocket();
int main(int argc, char* argv[])
{
CreateSocket();
return 0;
}
void CreateSocket()
{
WSADATA wsaData;
SOCKET ConnectSocket = INVALID_SOCKET;
struct addrinfo *result = NULL,
*ptr = NULL,
hints;
char *sendbuf = "this is a test";
int iResult;
// Initialize Winsock
iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
iResult = getaddrinfo("127.0.0.1", DEFAULT_PORT, &hints, &result);
ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
ptr->ai_protocol);
iResult = connect(ConnectSocket, ptr->ai_addr, (int)ptr->ai_addrlen);
freeaddrinfo(result);
iResult = send(ConnectSocket, sendbuf, (int)strlen(sendbuf), 0);
closesocket(ConnectSocket);
WSACleanup();
}
我在Windows 10,使用MinGW。 這是完整的編譯和錯誤:
gcc -Wall -o "test" "test.c" -lws2_32 (nel direttorio: C:\Users\FedericoPonzi\Google Drive\Programmazione\C\ProgrammazioneDiSistema\FedericoPonzi-programmazionedisistema-40c332bcd001\FedericoPonzi-programmazionedisistema-40c332bcd001\Prove)
test.c:10:0: warning: ignoring #pragma comment [-Wunknown-pragmas]
#pragma comment (lib, "Ws2_32.lib")
^
test.c: In function 'CreateSocket':
test.c:46:2: warning: implicit declaration of function 'getaddrinfo' [-Wimplicit-function-declaration]
iResult = getaddrinfo("127.0.0.1", DEFAULT_PORT, &hints, &result);
^
test.c:52:2: warning: implicit declaration of function 'freeaddrinfo' [-Wimplicit-function-declaration]
freeaddrinfo(result);
^
test.c:35:6: warning: variable 'iResult' set but not used [-Wunused-but-set-variable]
int iResult;
^
C:\Users\FEDERI~1\AppData\Local\Temp\ccAW2c9I.o:test.c:(.text+0xbb): undefined reference to `getaddrinfo'
C:\Users\FEDERI~1\AppData\Local\Temp\ccAW2c9I.o:test.c:(.text+0x11b): undefined reference to `freeaddrinfo'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\FEDERI~1\AppData\Local\Temp\ccAW2c9I.o: bad reloc address 0x20 in section `.eh_frame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
Compilazione fallita.
我使用Geany作爲IDE。
另外:爲什麼我得到「忽略編譯指示」錯誤?謝謝。
我應該刪除它嗎?沒有它會起作用嗎? –
是的,你應該,因爲被忽略了。 – LPs
@FedericoPonzi我編輯了第二個問題。 – LPs