Проблема с библиотеками, использующими winsock.h - PullRequest
3 голосов
/ 11 ноября 2009

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

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

Ответы [ 2 ]

4 голосов
/ 11 ноября 2009

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

0 голосов
/ 11 ноября 2009

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

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

...