业余经常折腾Linux开发,Linux下学的比较杂乱,但从编译优势来说Linux下三方库依赖省心,比Win VsStu省心的多。

Java Netty/RPC长连接接触比较多,Sock.io原理上其实没有去太多研究,看文档基于WebSocket 来实现的,但是v3.0版本还加入了asio。Linux C++个人也用Asio来做Tcp长连接,这里记录下LInux编译流程。

GitHub Download

socket.io
https://github.com/socketio/socket.io-client-cpp/releases/tag/3.1.0
asio
https://github.com/chriskohlhoff/asio/tree/230c0d2ae035c5ce1292233fcab03cea0d341264
rapidjson
https://github.com/Tencent/rapidjson/tree/a36110e11874bcf35af854940e0ce910c19a8b49
websocketpp
https://github.com/zaphoyd/websocketpp/tree/56123c87598f8b1dd471be83ca841ceae07f95ba

老版本三方依赖还有boost库,v3.0没有这里就不过多介绍了。解压sockio.client-cpp以后,进入到lib库,这里可以将依赖的三方空文件夹全部都删除。

1. ./rm -rf asio
2. ./rm -rf rapidjson
2. ./rm -rf websocketpp

通过Git重新下载并解压,最后结构目录如下:

Linux编译socket.io-client-cpp_socket.io

回到socket的根目录,创建build编译目录:

1. mkdir build
2. cd build

Linux编译socket.io-client-cpp_socket.io-client.cpp_02

设置一下CMakeLists.txt,解压CMake文件头文件路径是带有双引号,我这里带有双引号make找不到头文件。这边都删除了,其次如果make时候路径不对,要核对lib下pwd看看路径到底对不对,修改配置文件。

include_directories(${CMAKE_CURRENT_LIST_DIR}"/lib/websocketpp")

Linux编译socket.io-client-cpp_socket.io_03


比如Asio解压以后,头文件路径,和配置中的路径有差异,需要自己更改,否则make时候会报错 No such file or directory

fatal error: asio/version.hpp: No such file or directory
真实路径要和配置文件中一致:/project/socket.io-client-cpp-3.1.0/lib/asio/include/asio


如果要编译静态lib库,需要修改option(BUILD_SHARED_LIBS "Build the shared library" OFF),改成ON

Linux编译socket.io-client-cpp_c++_04


方便清理cmake编译文件,这里写了个简单的clear.sh

rm -rf ./cmake_install.cmake
rm -rf ./CMakeCache.txt
rm -rf ./CMakeFiles
rm -rf ./Makefile

cmake个人使用版本,编译:

[root@VM-16-13-centos build]# cmake --version
cmake version 3.29.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).
cmake ../CMakeLists.txt

Linux编译socket.io-client-cpp_socket.io-client.cpp_05

make编译

Linux编译socket.io-client-cpp_Linux Build_06

看了下sockio-clietn-cpp代码,都是c++标准,依赖头文件搞对,make编译中i基本不会出现什么问题,一切比较顺利。