ошибка компиляции winsock - PullRequest
3 голосов
/ 17 июня 2010

Следующие ошибки взяты из файла только с windows и winsock2.

C:\Users\ioil\Desktop\dm\bin>dmc sockit.c
typedef struct fd_set {
                      ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(85) : Error: 'fd_set' is already defined
} fd_set;
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(88) : Error: identifier or '( declarator )' expected
struct timeval {
               ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(129) : Error: 'timeval' is already defined
};
^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(132) : Error: identifier or '( declarator )' expected
struct  hostent {
                ^
C:\Users\ioil\Desktop\dm\bin\..\include\win32\WINSOCK2.H(185) : Error: 'hostent' is already defined
Fatal error: too many errors
--- errorlevel 1

C:\Users\ioil\Desktop\dm\bin>

Что уже было опробовано: поместите файл winsock.dll в тот же каталог, что и компилятор и программа для компиляции, поместите его в каталог system32 и введите в реестр с помощью команды regsrv32. Не знаю, куда идти отсюда, ценю любые советы. , ,

Ответы [ 3 ]

2 голосов
/ 17 июня 2010

Вы должны поместить winsock2.h перед windows.h, как это было предложено Юлианом Чербаною

#include <winsock2.h>
#include <windows.h>

Вы также можете использовать макрос "постное и среднее":

#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif

#include <windows.h>
#include <winsock2.h>

Причинаописано в msdn: Создание базового приложения Winsock

Также убедитесь, что вы связываете свою программу с файлом WS2_32.lib (это зависит от того, какую IDE вы используете, например, VisualStudio?)
В Visual Studio выберите «Проект»> «Свойства»> «Линкер»> «Дополнительные включения» (или что-то в этом роде, но не на компьютере с Visual Studio на данный момент…). Это также описано в приведенной выше ссылке.

2 голосов
/ 17 июня 2010

windows.h включает в себя winsock.h, который конфликтует с включаемым файлом winsock2.h. предотвратить первое включение, определив WINSOCKAPI перед включением windows.h:

#define _WINSOCKAPI_ 
#include "windows.h"
#include "winsock2.h"
1 голос
/ 22 февраля 2011
#pragma comment(lib, "wininet.lib")
#pragma comment (lib, "Ws2_32.lib")
#pragma comment (lib, "Mswsock.lib")
#pragma comment (lib, "AdvApi32.lib")

используйте это, чтобы избежать ошибок компиляции

...