2014-10-11 2 views
0

Я пытаюсь скомпилировать this с mingw32 для Linux.Winsock2.h: Нет такого файла или каталога

Однако, я получаю следующие ошибки и предупреждения:

# 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, что было бы приемлемым решением, но compiling with Visual Studio 2010 or later makes the application incompatible with the Windows 2000 target OS. Поэтому, хотя он и строится таким образом, двоичный файл не будет выполняться.

+0

Является ли Windows sy файлы заголовков заголовка в пути, который по умолчанию выполняется поиском компилятором? Возможно, вам придется использовать опцию '-I' (capital i) для добавления пути. –

+0

@JoachimPileborg: У меня нет файла 'Winsock2.h' - где я могу его получить? – SilverlightFox

+0

Я не знаю, есть ли пакет MinGW, содержащий системные библиотеки WIN32 и файлы заголовков, вы должны это искать. Если нет, должно быть много учебников, как это сделать. –

ответ

4

Как вы могли догадаться с его именем, winsock2.h напрямую связан с реализацией Windows сокетов TCP/IP и существует только в системах 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>

+0

Отлично - раздел '# else' не нужен - он скомпилирован, вынув строку' #include ' и добавляя '#include '. – SilverlightFox

Смежные вопросы