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>

Другие вопросы по тегам