在 Windows 上使用 websocketpp 和 MySQL 提升构建错误

Posted

技术标签:

【中文标题】在 Windows 上使用 websocketpp 和 MySQL 提升构建错误【英文标题】:Boost build error with websocketpp and MySQL on Windows 【发布时间】:2013-01-25 03:19:31 【问题描述】:

我正在尝试构建一个同时使用 websocketpp 和 mysql 的 C++ 应用程序。我使用 VS 2010 C++ Express 遇到了 2 个构建问题。

1) boost 库的问题。它会产生许多这样的错误:

 1>c:\program files (x86)\boost\boost_1_50\boost\thread\win32\thread_data.hpp(210): error C2146: syntax error : missing ')' before identifier 'rel_time'

这是 thread_data.hpp 中的相关 sn-p,从第 210 行开始:

inline BOOST_SYMBOL_VISIBLE void sleep(TimeDuration const& rel_time)
    
        interruptible_wait(detail::pin_to_zero(rel_time.total_milliseconds()));
    

2) 与记录在 here 的单词 VERSION 发生冲突,我相信它是独立的。

为了清楚简单地说明 boost 构建问题,我使用了 websocketpp 示例:echo_server.cpp,我在其中添加了以下内容:

#include "stdafx.h" 

Boost 库包括 websocketpp 网站上的“使用 websocketpp 构建程序”推荐的。

#include <boost/regex.hpp>
#include <boost/random.hpp> 
#include <boost/system/api_config.hpp>
#include <boost/system/config.hpp>
#include <boost/system/error_code.hpp>
#include <boost/system/system_error.hpp>
#include <boost/system/windows_error.hpp>

并且 MySQL 标头包括。添加这 2 个 boostinclude 会触发构建错误。如果我注释掉这 2 个包含,它的构建不会出错:

#include <my_global.h>
#include <mysql.h>

关于如何处理升压问题有什么建议吗?

我不认为这与这个构建问题相同,“尝试使用 MinGW 构建 websocket++:最后几个链接器错误 - 可能是什么?”

【问题讨论】:

【参考方案1】:

关于第一个错误,检查是否有宏干扰代码。右键单击并转到定义或自己在文件开头#define 宏,看看它在哪里被重新定义。在非常困难的情况下,通过编译器标志查看预处理器输出。

关于其余部分,您没有为 Boost 和 MySQL 提供任何版本。然后是 my_global.h(或者是 MySQL 的那一部分?)和 stdafx.h,它们都在您的控制之下,但您没有在此处显示它们。此外,请尝试将问题减少到尽可能小的代码段。简而言之,提供一个可重现的例子。

【讨论】:

谢谢你,末日审判者。第一个问题确实是一个宏。有关更多详细信息,请参阅我的原始消息中的链接。在这个线程中,我的重点是第二个问题。 stdafx.h 是 Microsoft 预编译的头文件。我删除了它并得到了同样的错误。 my_global.h 是 MySQL 的一部分,所以它是问题的一部分。版本: Boost:boost_1_50 于 2012 年 8 月 3 日下载。 MySQL:MySQL Connector C 6.0.2,(下载并安装于 12/2012)和 mysql5.5.16(大约一岁)好点——我会更新所有内容,看看提升问题是否仍然存在。 一个澄清: VERSION 问题是一个宏。 doomster,你认为boost问题也是宏观问题吗? TY..."sleep" in \boost_1_51\boost\config\thread_data.hpp template&lt;typename TimeDuration&gt; inline BOOST_SYMBOL_VISIBLE void sleep(TimeDuration const&amp; rel_time) interruptible_wait(detail::pin_to_zero(rel_time.total_milliseconds())); 正在被处理为 ...\mysql\mysql5.5.16\include 中“定义”的宏\my_global.h 第 130 行 #define sleep(a) Sleep((a)*1000) 这解释了错误。有没有办法在不编辑和重建 boost 或 MySQL 的情况下修复它? Doomster 是正确的——两个问题都是宏冲突。解决方案是使用 pImple 习惯用法来包装 MySQL 的使用。

以上是关于在 Windows 上使用 websocketpp 和 MySQL 提升构建错误的主要内容,如果未能解决你的问题,请参考以下文章

websocketpp库中的错误和Windows Visual Studio 2015中的提升[关闭]

如何在 websocketpp 中使用自定义记录器?

使用 websocketpp 库连接到 c++ websocket 服务器

WebRTC笔记之二十一:基于WebSocketPP的Janus客户端

如何使用 websocket websocketpp 发送和接收消息?

websocketpp的流媒体微服务使用安全