3

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

提前致谢 !

4

2 回答 2

4

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

于 2009-11-11T11:32:01.710 回答
0

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

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

于 2009-11-11T11:26:15.627 回答