Error winsock h has already been included

Hi, Compiling the following source file with Microsoft Visual C++ 2015 and Boost 1.60.0: #include #include displays the following error: error direc...

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account


Closed

Chnossos opened this issue

Feb 14, 2016

· 6 comments


Closed

Conflict with Boost.Asio

#179

Chnossos opened this issue

Feb 14, 2016

· 6 comments

Comments

@Chnossos

Hi,

Compiling the following source file with Microsoft Visual C++ 2015 and Boost 1.60.0:

#include <spdlog/spdlog.hpp>
#include <boost/asio.hpp>

displays the following error:

error directive: WinSock.h has already been included (c:C++boostboost_1_60_0boostasiodetailsocket_types.hpp:24)

@crackedmind

Spdlog don’t use winsock librrary. Check that you didn’t include Winsock2.h before asio.
Or may be you include windows.h before asio without WIN32_LEAN_AND_MEAN define, that disabled inclusion of winsock.h

@RavenX8

I have this same issue. Before I added spdlog, I could compile just fine. After adding the spdlog include file, I keep getting this error. The only way to fix it that I could see was to not use this lib.

@gabime

I will forward this to cppformat lib. seems the file spdlog/details/format.cc includes windows.h without defining WIN32_LEAN_AND_MEAN

@vitaut

As mentioned in fmtlib/fmt#297, I don’t think WIN32_LEAN_AND_MEAN should be defined in a header because it can break some users. Since the error is generated by asio which wants to include winsock.h first, I think a better solution is to reorder the includes:

#include <boost/asio.hpp>
#include <spdlog/spdlog.hpp>

This requirement should probably be documented in Boost asio somewhere.

gabime

added a commit
that referenced
this issue

Mar 21, 2016

@gabime

…OWS_H=0 in format.h and preventing include of windows.h)

@gabime

@gcerretani

The same bug reappeared in version v1.6.0.

This source code

#include <spdlog/spdlog.h>
#include <boost/asio.hpp>

compiles in v1.5.0, but fails since v1.6.0 with messages like

fatal error C1189: #error: WinSock.h has already been included.

Tested up to v1.8.0 with Boost v1.67 and MSVC 1900 (2015).

bachittle

pushed a commit
to bachittle/spdlog
that referenced
this issue

Dec 22, 2022

@ankit-bhargava

2 / 1 / 1

Регистрация: 16.01.2018

Сообщений: 34

1

11.07.2020, 13:11. Показов 22922. Ответов 1


Собираю проект где использую boost asio и ранее включил Windows.h в другом файле для загрузки dll, при компиляции выскакивает ошибка >C:boost_1_72_0boostasiodetailsocket_types.hp p(24,1): fatal error C1189: #error: WinSock.h has already been included

поюзав google пришел к тому что надо в Проект-> Свойства->С/C++->Препроцессор->Определения препроцессора нужно определить WIN32_LEAN_AND_MEAN.

но теперь при компиляции получаю новую кучу ошибок.

Код

1>C:boost_1_72_0boostasioasync_result.hpp(492,1): error C2062: тип "bool" не требуется
1>C:boost_1_72_0boostasioasync_result.hpp(493,1): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:boost_1_72_0boostasioasync_result.hpp(493,1): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:boost_1_72_0boostasiopost.hpp(56,11): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasiopost.hpp(27): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasiopost.hpp(56,51): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasiopost.hpp(56,51): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasiopost.hpp(56,51): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasiopost.hpp(94,5): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasiopost.hpp(27): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasiopost.hpp(94,1): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasiopost.hpp(95,1): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasiopost.hpp(95,1): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasiopost.hpp(107,5): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasiopost.hpp(27): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasiopost.hpp(107,1): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasiopost.hpp(108,1): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasiopost.hpp(108,1): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasioimplpost.hpp(81,11): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasioimplpost.hpp(26): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasioimplpost.hpp(81,51): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasioimplpost.hpp(81,51): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasioimplpost.hpp(81,51): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasioimplpost.hpp(84,1): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:boost_1_72_0boostasioimplpost.hpp(84,1): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:boost_1_72_0boostasioimplpost.hpp(90,5): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasioimplpost.hpp(26): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasioimplpost.hpp(90,1): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasioimplpost.hpp(90,45): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasioimplpost.hpp(90,45): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasioimplpost.hpp(94,1): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:boost_1_72_0boostasioimplpost.hpp(94,1): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:boost_1_72_0boostasioimplpost.hpp(100,5): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasioimplpost.hpp(26): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasioimplpost.hpp(100,1): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasioimplpost.hpp(100,45): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasioimplpost.hpp(100,45): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasioimplpost.hpp(105,1): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:boost_1_72_0boostasioimplpost.hpp(105,1): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:boost_1_72_0boostasioimplpost.hpp(105,1): fatal error C1003: число ошибок превышает 100; остановка компиляции

В чем ошибка?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Собираю проект, где использую boost asio и ранее включил Windows.h в другом файле для загрузки dll, при компиляции выскакивает ошибка

>C:boost_1_72_0boostasiodetailsocket_types.hpp(24,1): fatal error C1189: #error: WinSock.h has already been included

Проект-> Свойства->С/C++->Препроцессор->Определения препроцессора нужно определить WIN32_LEAN_AND_MEAN.

Ошибки

1>C:boost_1_72_0boostasioasync_result.hpp(492,1): error C2062: тип "bool" не требуется
1>C:boost_1_72_0boostasioasync_result.hpp(493,1): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:boost_1_72_0boostasioasync_result.hpp(493,1): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:boost_1_72_0boostasiopost.hpp(56,11): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasiopost.hpp(27): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasiopost.hpp(56,51): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasiopost.hpp(56,51): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasiopost.hpp(56,51): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasiopost.hpp(94,5): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasiopost.hpp(27): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasiopost.hpp(94,1): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasiopost.hpp(95,1): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasiopost.hpp(95,1): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasiopost.hpp(107,5): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasiopost.hpp(27): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasiopost.hpp(107,1): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasiopost.hpp(108,1): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasiopost.hpp(108,1): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasioimplpost.hpp(81,11): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasioimplpost.hpp(26): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasioimplpost.hpp(81,51): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasioimplpost.hpp(81,51): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasioimplpost.hpp(81,51): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasioimplpost.hpp(84,1): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:boost_1_72_0boostasioimplpost.hpp(84,1): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:boost_1_72_0boostasioimplpost.hpp(90,5): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasioimplpost.hpp(26): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasioimplpost.hpp(90,1): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasioimplpost.hpp(90,45): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasioimplpost.hpp(90,45): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasioimplpost.hpp(94,1): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:boost_1_72_0boostasioimplpost.hpp(94,1): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:boost_1_72_0boostasioimplpost.hpp(100,5): error C2039: "completion_token_for": не является членом "boost::asio".
1>C:boost_1_72_0boostasioimplpost.hpp(26): message : см. объявление "boost::asio"
1>C:boost_1_72_0boostasioimplpost.hpp(100,1): error C2061: синтаксическая ошибка: идентификатор "completion_token_for"
1>C:boost_1_72_0boostasioimplpost.hpp(100,45): error C2988: неопознанное объявление или определение шаблона
1>C:boost_1_72_0boostasioimplpost.hpp(100,45): error C2059: синтаксическая ошибка: >
1>C:boost_1_72_0boostasioimplpost.hpp(105,1): error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
1>C:boost_1_72_0boostasioimplpost.hpp(105,1): error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
1>C:boost_1_72_0boostasioimplpost.hpp(105,1): fatal error C1003: число ошибок превышает 100; остановка компиляции

В чем ошибка?

В моем проекте используется windows.h, в котором используется winsock.h, и мне нужно включить boost: assio, который использует winsock2. Поэтому я получаю много ошибок, которые говорят, что Winsock.h уже включен.
Я могу определить WIN32_LEAN_AND_MEAN. так что windows.h не будет использовать winsock. Проблема в том, что мне нужен windows.h, чтобы использовать его, и мне просто нужен Asio для асинхронных таймеров. Мне не нужен его winsock2.h. Я попытался найти, как отключить его использование winsock2, и я обнаружил, что могу это сделать, определив BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN, прежде чем включать boost: asio, но я все равно получаю ту же ошибку.

#include <windows.h>
#define BOOST_ASIO_NO_WIN32_LEAN_AND_MEAN
#include <boost/asio.hpp>

Ошибка

1 > c:program filesboostboost_1_47boostasiodetailsocket_types.hpp(22): фатальная ошибка C1189: #error: WinSock.h уже включен

17 март 2012, в 15:11

Поделиться

Источник

5 ответов

Попробуйте изменить порядок или включить его. Начните с boost/asio.hpp и поставьте window.h после него.

Обычно авторы любой библиотеки кода решают проблемы совместимости, но они могут сделать это лучше, если их код первым встретит компилятор и препроцессор.

Там аналогичная проблема с ACE, включая ace/OS.h, прежде чем что-либо разрешит ее.

selalerer
17 март 2012, в 14:01

Поделиться

Поскольку Danius (OP) указывает компиляцию с

#include <windows.h>
#include <boost/asio.hpp>

не удается выполнить эту ошибку:

1>c:source<SNIP>boost1.51.0boostasiodetailsocket_types.hpp(22): fatal error C1189: #error :  WinSock.h has already been included

С другой стороны,

#include <boost/asio.hpp>
#include <windows.h>

Создает кучу помех и неправильно устанавливает версию Windows #

1?  Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:
1>  - add -D_WIN32_WINNT=0x0501 to the compiler command line; or
1>  - add _WIN32_WINNT=0x0501 to your project Preprocessor Definitions.
1>  Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).

Я не мог найти никакого способа обойти это, что не оставило бы плохой вкус, но это:

#ifdef _WIN32
#  ifdef USE_ASIO
//     Set the proper SDK version before including boost/Asio
#      include <SDKDDKVer.h>
//     Note boost/ASIO includes Windows.h. 
#      include <boost/asio.hpp>
#   else //  USE_ASIO
#      include <Windows.h>
#   endif //  USE_ASIO
#else // _WIN32
#  ifdef USE_ASIO
#     include <boost/asio.hpp>
#  endif // USE_ASIO
#endif //_WIN32

Производит чистый компилятор.

<EDITORIAL> Не должно быть этого жесткого </EDITORIAL>

Dale Wilson
29 апр. 2013, в 22:39

Поделиться

Для меня, переключение порядка включений вызвало ошибки компиляции с другим Microsoft include, который я использовал, — это объявление вещей с помощью интерфейса typedef.

Поскольку моя ошибка исходила из socket_types.h, из этих строк:

# if defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)
#  error WinSock.h has already been included
# endif // defined(_WINSOCKAPI_) && !defined(_WINSOCK2API_)

Я включил include winsock2.h перед Windows.h, а затем, наконец, boost/asio.hpp включил, а вещи затем скомпилировались с радостью.

Theanderblast
25 апр. 2014, в 15:17

Поделиться

Другой рабочий стол, который я использовал, состоит в том, чтобы сконцентрировать все зависимые от asio
кода в файле XXX.hpp и включить его в начало каждого окна
XXX.cpp, где вы используете его объекты.

этот метод помещает include asio над любым другим включением windows.h и обходится вокруг проблемы.

ori
28 сен. 2017, в 11:31

Поделиться

#ifdef BOOST_OS_WINDOWS
#define _WIN32_WINNT 0x0501
#if _WIN32_WINNT <= 0x0501
#define BOOST_ASIO_DISABLE_IOCP
#define BOOST_ASIO_ENABLE_CANCELIO
#endif
#endif

William H Myatt
16 нояб. 2016, в 07:16

Поделиться

Ещё вопросы

  • 0как изменить титульную страницу пользователя facebook с помощью api graph graph
  • 1Транзакции Entity Framework
  • 0Docker MySQL ошибка подключения
  • 0не могу получить данные JSON из URL
  • 1Как программно получить ссылку на перечисление в Java?
  • 0Как нарисовать таблицу как вертикальную, используя Jquery?
  • 0Phonegap и JqueryMobile блокируют события и функции пользовательского интерфейса
  • 0добавить в переменную по переключателю кнопку php
  • 1«Метод должен возвращать результат» при вызове другого метода, который выдает только исключение
  • 0Инициализация контроллера в AngularJS
  • 0defaultValue не работает в коде JavaScript
  • 0Как проверить текущее имя браузера?
  • 1Использование API набора данных TensorFlow приводит к зависанию процесса в деструкторе сеанса
  • 1Использование Enterprise Architect для создания диаграммы последовательности для службы C # WCF
  • 1Android — Настройка обнаружения коллизий растровых изображений после поворота по матрице
  • 0условно в зависимости от стиля
  • 0Перенаправление с локального диска на сервер
  • 1Я создавал веб-сервис WCF и застрял в методах Post & Put, где Get работает нормально. Я добавил в него .edmx. Любое решение?
  • 0Получить src-значение img, ссылаясь на параметр CSS в jQuery
  • 1Включите поле, если установлен один из трех флажков C #
  • 0Перестал работать mysqldump с преобразованием в MariaDB — set-gtid-purged = OFF проблема?
  • 0PHP Lua система регистрации
  • 0Как загрузить данные из базы данных MySQL и сохранить их в локальной базе данных для автономного использования в Android?
  • 1изменить элементы списка c: forEach, используя JavaScript
  • 1Как использовать несколько обратных вызовов при зацикливании данных
  • 0Изменение формата даты Jquery Datepicker в Великобритании и форма не отправляется
  • 1Как выбрать что-то в атрибуте XML?
  • 1JS — Назначение переменной при использовании обратного вызова [duplicate]
  • 0Бесконечное вычисление qsort
  • 0Javascript — удалить / отключить метку времени из файла журнала
  • 0Поведение динамически размещаемого массива классов
  • 0PHP, IIS, Oracle (OCI) не работает
  • 0JQuery DataTable fnUpdate не обновляет значения из источника объекта: Uncaught TypeError: Невозможно вызвать метод ‘fnSetData’ из неопределенного
  • 0div не может анимировать нижнюю сторону и выходит из экрана окна со всех сторон
  • 0jQuery .click не работает при использовании .hover, как я могу это исправить?
  • 0Объедините шейдеры с DirectX 11
  • 0Добавление значения в качестве гиперссылки в MQSQL / PHP
  • 0Разбить строку с координатами в широту / долготу в MySQL
  • 0Код jQuery для адаптации заполнения класса CSS
  • 1JavaScript куча нехватки памяти в angular 2
  • 0ВСТАВИТЬ ТРИГГЕРЫ SQL. Как получить значение из другой таблицы после вставки в новую таблицу
  • 1Какой самый быстрый способ заменить текст многих элементов управления контентом через office-js?
  • 0Печать этикеток отгрузки по методу фиксированной ставки в Magento?
  • 1Pandas str.extract / re.search с использованием другой серии или столбца в качестве шаблона
  • 0Как я могу напечатать результат добавления функции ..?
  • 0Сделать изменение формы (например, черновик / отделка) на Symfony2
  • 1Создание надстройки Outlook 2013 MailItem, блокирующее Outlook
  • 0Mysql [MariaDB] — неизвестная ошибка 1130
  • 0Потеря прицела при обновлении страницы
  • 1преобразование outputStream в байтовый массив [duplicate]

Сообщество Overcoder

Понравилась статья? Поделить с друзьями:
  • Error winhttp name not resolved
  • Error winerror 87 параметр задан неверно
  • Error while opening the virtual machine insufficient permissions
  • Error while opening the virtual machine insufficient permission to access the file
  • Error while opening source stream