Winsock2.h: нет такого файла или каталога
Я пытаюсь скомпилировать это с помощью mingw32 для Linux.
Однако я получаю следующие ошибки и предупреждения:
# i586-mingw32msvc-gcc ms04-020.c -lws2_32 -o ms04-020.exe
ms04-020.c:43:22: error: Winsock2.h: No such file or directory
ms04-020.c: In function ‘main’:
ms04-020.c:113: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:114:11: warning: unknown escape sequence '\;'
ms04-020.c: In function ‘readwrite’:
ms04-020.c:251: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:259: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:264: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:279: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:285: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:290: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:301: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:307: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:312: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c: In function ‘client_connect’:
ms04-020.c:333: warning: incompatible implicit declaration of built-in function ‘printf’
ms04-020.c:343: warning: incompatible implicit declaration of built-in function ‘printf’
Как я могу исправить ошибку, касающуюся Winsock2.h
? Мне удалось добиться этого для компиляции с использованием Visual Studio 2013 на Windows 7, что было бы приемлемым решением, однако компиляция с Visual Studio 2010 или более поздней версии делает приложение несовместимым с целевой ОС Windows 2000. Поэтому, даже если он построен таким образом, двоичный файл не будет выполняться.
1 ответ
Как вы могли догадаться с его именем, winsock2.h
непосредственно связан с реализацией сокетов TCP/IP в Windows и существует только в системах Windows.
Может быть трудно иметь полную совместимость include
между Windows и Linux. ИМХО, вам следует:
Удалить
#include <winsock32.h>
из вашего источника для компиляции Linux или лучше напишите:#ifdef _WIN32 #include <Winsock2.h> #endif
- добавить (в конце концов в
#else
раздел) отсутствующие заголовки
В настоящее время, warning: incompatible implicit declaration of built-in function ‘printf’
показывает, что вам не хватает #include <stdio.h>