Проблема с библиотеками, использующими winsock.h

StackOverflow https://stackoverflow.com/questions/1714539

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть проект, который использует Boost.Asio и образцы медиа-декодирования, входящие в состав библиотеки Intel IPP.Проблема заключается в следующем.Если я скомпилирую проект без определения WIN32_LEAN_AND_MEAN, Asio жалуется на печально известную ошибку «winsock.h уже включен».Если я определяю макрос, заголовок в другой библиотеке будет иметь неопределенные типы, поскольку он зависит от windows.h, включая winsock.h.Я попытался добавить winsock.h в этот заголовок вручную, но это заставило Boost.Asio снова вскрикнуть.Единственное решение, которое я могу придумать, — это просмотреть каждую единицу компиляции и убедиться, что Asio всегда включается первым.Из-за размера и сложности проекта (и уродливости этого решения) мне хотелось бы найти лучший способ.

Заранее спасибо !

Это было полезно?

Решение

вы можете обойти это, если разделите свой источник и убедитесь, что не используете в своем приложении какой-то общий заголовок, в который вы включаете как Asio, так и IPP.Таким образом, исходные файлы, которым требуется Asio, включают заголовки Boost, исходные файлы, которым требуется IPP, включают заголовки IPP, но файлы заголовков для ваших классов, которые должны ссылаться на оба, не должны включать какие-либо внешние заголовки и при необходимости использовать упреждающие объявления.

Другие советы

«заголовок в другой библиотеке имеет неопределенные типы»

Сколько?Насколько сложно?Возможно, вы могли бы определить эти типы?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top