C++ 使用winsock.h的库出现问题

C++ 使用winsock.h的库出现问题,c++,boost-asio,intel-ipp,C++,Boost Asio,Intel Ipp,我有一个使用Boost.Asio和“英特尔IPP库”附带的媒体解码示例的项目。问题如下。如果我编译项目时没有定义WIN32\u LEAN\u和_MEAN,Asio会抱怨臭名昭著的“winsock.h已包含”错误。如果我定义宏,则另一个库中的头具有未定义的类型,因为它依赖于包括winsock.h在内的windows.h。我试图手动将winsock.h添加到该标题中,但这使Boost.Asio再次大喊大叫。我能想到的唯一解决方案是遍历每个编译单元,并确保始终首先包含Asio。由于项目的规模和复杂性(

我有一个使用Boost.Asio和“英特尔IPP库”附带的媒体解码示例的项目。问题如下。如果我编译项目时没有定义
WIN32\u LEAN\u和_MEAN
,Asio会抱怨臭名昭著的“winsock.h已包含”错误。如果我定义宏,则另一个库中的头具有未定义的类型,因为它依赖于包括winsock.h在内的windows.h。我试图手动将winsock.h添加到该标题中,但这使Boost.Asio再次大喊大叫。我能想到的唯一解决方案是遍历每个编译单元,并确保始终首先包含Asio。由于项目的规模和复杂性(以及解决方案的丑陋性),我想找到一个更好的方法

提前谢谢

“其他库中的标头具有未定义的类型”


有多少?有多复杂?也许您可以定义这些类型?

如果您拆分源代码,并确保在您的应用程序中不使用包含Asio和IPP的某种公共头文件,那么您就可以解决这个问题。因此,需要Asio的源文件包括Boost头文件,需要IPP的源文件包括IPP头文件,但是需要同时引用这两个头文件的类的头文件不应包括任何外部头文件,并且在需要时使用前向声明。

Agree-听起来像是#include需要合理化。在同一个编译单元中使用winsock.h和boost.asio(使用winsock2.h)是没有意义的。