【问题标题】:Problem with libraries using winsock.h使用 winsock.h 的库的问题
【发布时间】:2009-11-11 11:17:06
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: c++ boost-asio intel-ipp


    【解决方案1】:

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

    【讨论】:

    • 同意 - 听起来#includes 需要合理化。在同一个编译单元中使用 winsock.h 和 boost.asio(使用 winsock2.h)是没有意义的。
    【解决方案2】:

    " 另一个库中的标头具有未定义的类型"

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

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 2013-10-27
      • 2015-12-29
      • 2012-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2013-11-08
      相关资源
      最近更新 更多