powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подключить boost/asio.hpp
12 сообщений из 12, страница 1 из 1
Подключить boost/asio.hpp
    #39897487
polin11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ОС W10 QtCreator(СМake) компилятор Clang
подключаю заголовочный файл
#include <boost/asio.hpp>
падают ошибки при компиляции типа:
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17134.0\shared\ws2def.h:235: ошибка: redefinition of 'sockaddr'
typedef struct sockaddr {
C:\.conan\kzey4w\1\include\boost\asio\detail\socket_types.hpp:24: ошибка: WinSock.h has already been included
# error WinSock.h has already been included

Для исправления проблемы предлагают добавить
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#endif
дефайн WIN32_LEAN_AND_MEAN означает, что будут отброшены большинство редко используемых функций, макросов и типов Windows.

Вопрос: кто-нибудь знает, как подключить boost/asio.hpp не используя #define WIN32_LEAN_AND_MEAN?
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39897505
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11,

У тебя Windows.h нигде явно/неявно не подключается? Дело в том, что он подключает библиотеку WinSock первой версии.

А Boost::Asio подключает WinSock второй версии.

Попробуй так:

Код: plaintext
1.
2.
3.
4.
#define _WINSOCKAPI_    // stops windows.h including winsock.h
#include <windows.h>
// ...
#include "MyClass.h"    // Which includes <winsock2.h>



Мне помогало с Asio. Попробуй перенести #include <boost/asio.hpp> чуть повыше в списке подключений. Там довольно легко проблему найти. Но это только мой похожий случай.
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39897514
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11,

Кстати, а чем тебе не нравится WIN32_LEAN_AND_MEAN?
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39897521
polin11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WIN32_LEAN_AND_MEAN исключает API, такие как криптография, DDE, RPC, Shell и Windows Sockets.

Напрягает, что может где-то что-то отвалиться
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39897528
polin11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petrav
polin11,

У тебя Windows.h нигде явно/неявно не подключается?


Подключается, я убрал - ничего не изменилось
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39897533
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11,

Вот два работающих варианта:

Код: plaintext
1.
2.
3.
4.
#define _WINSOCKAPI_
#include <Windows.h>
#undef _WINSOCKAPI_
#include <boost/asio.hpp>



Код: plaintext
1.
2.
#include <boost/asio.hpp>
#include <Windows.h>


Могу посоветовать второй вариант. Потому что Windows.h раз в несколько лет компиляцию ломает своими безумными макросами. Лучше в самый низ.
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39897540
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11
petrav
polin11,

У тебя Windows.h нигде явно/неявно не подключается?


Подключается, я убрал - ничего не изменилось

Значит где-то ещё есть подключение Windows.h - в других хидерах. Или явно подключается WinSock.h. У тебя конфликт с файлом WinSock.h - нужно исключить его подключение.

Правда у меня компилятор Студии, но симптомы вроде такие же.
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39897551
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11Напрягает, что может где-то что-то отвалиться

Отвалится - подключишь нужные заголовки явно вместо братской могилы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39897566
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11
WIN32_LEAN_AND_MEAN исключает API, такие как криптография, DDE, RPC, Shell и Windows Sockets.

Напрягает, что может где-то что-то отвалиться

Ааа... Просто так т.е.

Тогда лучше всё же WIN32_LEAN_AND_MEAN опрелить, но не перед asio.hpp, а перед windows.h. Перед всеми подключениями windows.h в проекте. А лучше создать свой заголовочник для подключения windows.h, а лучше вообще его не подключать. :)
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39898497
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11
WIN32_LEAN_AND_MEAN исключает API, такие как криптография, DDE, RPC, Shell и Windows Sockets.

Напрягает, что может где-то что-то отвалиться


Не отвалится.
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39898499
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
polin11


Вопрос: кто-нибудь знает, как подключить boost/asio.hpp не используя #define WIN32_LEAN_AND_MEAN?


Конечно.

В одном исходнике используешь boost asio и определяешь WIN32_LEAN_AND_MEAN,
в другом исходнике НЕ используешь boost asio и НЕ определяешь WIN32_LEAN_AND_MEAN, и можешь там использовать те самые редкоиспользуемые вещи из WinAPI
...
Рейтинг: 0 / 0
Подключить boost/asio.hpp
    #39898500
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
polin11
WIN32_LEAN_AND_MEAN исключает API, такие как криптография, DDE, RPC, Shell и Windows Sockets.

Напрягает, что может где-то что-то отвалиться

Ааа... Просто так т.е.

Тогда лучше всё же WIN32_LEAN_AND_MEAN опрелить, но не перед asio.hpp, а перед windows.h. Перед всеми подключениями windows.h в проекте. А лучше создать свой заголовочник для подключения windows.h, а лучше вообще его не подключать. :)


Это всё равно, где этот макрос определить, его только windows.h и использует.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Подключить boost/asio.hpp
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]