I am trying to import websocket++ to my project in Visual Studio 2017, but I have got a lot of errors with using it.
Project structure:
MyProject
- src
- websocketpp
CMakeLists.txt
echo_server.cpp
My CMakeLists.txt looks like:
cmake_minimum_required(VERSION 3.5)
project(MyProject)
include_directories(${PROJECT_SOURCE_DIR}/websocketpp)
add_executable(MyProject echo_server.cpp)
echo_server.cpp looks like:
#include "websocketpp/config/asio_no_tls.hpp"
#include "websocketpp/server.hpp"
#include <iostream>
typedef websocketpp::server<websocketpp::config::asio> server;
using websocketpp::lib::placeholders::_1;
using websocketpp::lib::placeholders::_2;
using websocketpp::lib::bind;
// pull out the type of messages sent by our config
typedef server::message_ptr message_ptr;
// Define a callback to handle incoming messages
void on_message(server* s, websocketpp::connection_hdl hdl, message_ptr msg) {
std::cout << "on_message called with hdl: " << hdl.lock().get()
<< " and message: " << msg->get_payload()
<< std::endl;
// check for a special command to instruct the server to stop listening so
// it can be cleanly exited.
if (msg->get_payload() == "stop-listening") {
s->stop_listening();
return;
}
try {
s->send(hdl, msg->get_payload(), msg->get_opcode());
} catch (websocketpp::exception const & e) {
std::cout << "Echo failed because: "
<< "(" << e.what() << ")" << std::endl;
}
}
int main() {
// Create a server endpoint
server echo_server;
try {
// Set logging settings
echo_server.set_access_channels(websocketpp::log::alevel::all);
echo_server.clear_access_channels(websocketpp::log::alevel::frame_payload);
// Initialize Asio
echo_server.init_asio();
// Register our message handler
echo_server.set_message_handler(bind(&on_message,&echo_server,::_1,::_2));
// Listen on port 9002
echo_server.listen(9002);
// Start the server accept loop
echo_server.start_accept();
// Start the ASIO io_service run loop
echo_server.run();
} catch (websocketpp::exception const & e) {
std::cout << e.what() << std::endl;
} catch (...) {
std::cout << "other exception" << std::endl;
}
}
Errors:
Severity Code Description Project File Line Suppression State Error (active) E1696 cannot open source file "websocketpp/config/core.hpp" MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\websocketpp\config\asio_no_tls.hpp 31
Error (active) E1696 cannot open source file "websocketpp/transport/asio/endpoint.hpp" MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\websocketpp\config\asio_no_tls.hpp 32
Error (active) E1696 cannot open source file "websocketpp/roles/server_endpoint.hpp" MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\websocketpp\server.hpp 31
Error (active) E0283 qualified name is not allowed MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 7
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 7
Error (active) E0276 name followed by '::' must be a class or namespace name MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 9
Error (active) E0276 name followed by '::' must be a class or namespace name MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 10
Error (active) E0276 name followed by '::' must be a class or namespace name MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 11
Error (active) E0276 name followed by '::' must be a class or namespace name MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 14
Error (active) E0070 incomplete type is not allowed MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 17
Error (active) E0020 identifier "server" is undefined MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 17
Error (active) E0020 identifier "s" is undefined MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 17
Error (active) E0018 expected a ')' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 17
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 17
Error (active) E0077 this declaration has no storage class or type specifier MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 43
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 43
Error (active) E0077 this declaration has no storage class or type specifier MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 44
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 44
Error (active) E0077 this declaration has no storage class or type specifier MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 47
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 47
Error (active) E0077 this declaration has no storage class or type specifier MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 50
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 50
Error (active) E0077 this declaration has no storage class or type specifier MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 53
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 53
Error (active) E0077 this declaration has no storage class or type specifier MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 56
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 56
Error (active) E0077 this declaration has no storage class or type specifier MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 59
Error (active) E0065 expected a ';' MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 59
Error (active) E0169 expected a declaration MyProject - x64-Debug (default) G:_Development\Projects\MyProject\src\echo_server.cpp 60
Error C1083 Cannot open include file: 'websocketpp/config/core.hpp': No such file or directory C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\src\CMakeLists.txt g:_development\projects\myproject\src\websocketpp\config\asio_no_tls.hpp 31
What is wrong? please help.
Reading the implementation of websocketpp, importing it into your project should be quite simple.
Start by downloading websocketpp and install it:
Do not forget the
..in the command. It's the relative path to the source directory from the build directory.The
some/known/pathcan be a global path on your machine, in the user's directory or even inside a specific directory in your project.Also, since this library export the package into the user's package registry, you can skip the install and let cmake import the build tree as the package itself. I usually find installing them to be cleaner however.
Then inside your project:
You can then invoke cmake like this: