如何在C++中使用websocketpp?编译示例报头文件不存在如何解决
编译报错根因
当前出现的fatal error: websocketpp/config/asio_no_tls.hpp: No such file or directory错误,核心原因是编译器的头文件搜索路径,没有覆盖你本地克隆的websocketpp源码目录,导致预处理器无法定位到头文件位置,和示例代码本身的逻辑错误无关。
完整使用流程(适配你当前的无TLS服务端示例)
前置依赖安装
websocketpp以纯头文件实现为主,不需要编译安装库本体,运行时依赖两个基础库:
- 基础开发依赖:Boost、原生Asio(你使用的是无TLS配置,不需要额外安装OpenSSL)
- Debian/Ubuntu 系统执行安装命令:
sudo apt install libboost-all-dev libasio-dev - CentOS/RHEL 系统执行安装命令:
sudo dnf install boost-devel asio-devel - Windows 环境可通过vcpkg安装对应依赖包完成配置。
- Debian/Ubuntu 系统执行安装命令:
解决includePath配置问题
假设你将websocketpp仓库克隆到本地的路径为/本地路径/websocketpp,且该路径下可直接看到websocketpp文件夹(文件夹内存放config、server.hpp等核心头文件):
- 命令行编译场景:在g++编译命令中通过
-I参数指定头文件搜索路径,参考编译命令如下:g++ 你的服务端代码文件.cpp -o websocket_print_server -I /本地路径/websocketpp -lboost_system -pthread - IDE开发场景(如VS Code):在配置文件
c_cpp_properties.json的includePath数组中,添加/本地路径/websocketpp/**路径,即可消除IDE的语法报红,和实际编译逻辑保持一致。 - 特别注意:不要将
-I参数直接指向websocketpp子文件夹内部,否则编译器会重复拼接路径,依然无法找到对应头文件。
示例代码运行注意事项
你编写的示例服务端代码逻辑不存在问题,启动后需要注意几个运行细节:
- 如果
listen(9002)初始化失败,检查9002端口是否被其他进程占用,更换未占用的端口即可。 - 服务端启动后,需要在防火墙放行对应端口的入站规则,否则外部客户端无法建立连接。
- 功能测试可使用浏览器自带的WebSocket调试工具,连接地址为
ws://127.0.0.1:9002,发送文本消息后,服务端控制台会直接打印收到的消息内容。
常见踩坑说明
- 后续如果需要实现wss加密的WebSocket连接,仅需要将代码中的头文件替换为
websocketpp/config/asio_ssl.hpp,额外安装OpenSSL依赖,编译时增加-lssl -lcrypto链接参数即可,业务逻辑不需要改动。 - 生产环境部署时,建议补充连接打开、连接关闭的回调处理,避免异常连接导致的资源泄漏。
内容的提问来源于stack exchange,提问作者Raman
相关产品推荐
相关产品推荐

