2009-11-11 1 views
3

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

Заранее благодарен!

ответ

4

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

+0

Согласен - звучит как #includes необходимость рационализации. Не имеет смысла использовать winsock.h и boost.asio (который использует winsock2.h) в одном модуле компиляции. –

0

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

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