C++的asio库的下载编译

 

概述

Asio是一个跨平台的C++库,用于网络和低级I / O编程 为开发人员提供一致的异步模型,使用现代 C++方法。 当针对C ++ 11(或更高版本)时,大多数asio都可以在没有任何额外依赖项的情况下使用。独立版的asio是header-only,所以使用时只需包含头文件即可。把解压得到的include目录(包含asio.hpp)放到项目目录里。

相关链接

下载

下载地址1 我这里选择的是1_24_0版本,下载之后解压。

编译

编译环境

  • Windows
  • gcc version 7.3.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
  • vscode cmake插件
  • cmake

编译自测试用例

进入源码路径

cd asio-1.24.0
code ./

新建main.cpp

#include <iostream>
#include "asio.hpp"

void print(const asio::error_code& /*e*/)
{
  std::cout << "Hello, world!" << std::endl;
}

int main()
{
    asio::io_context io;
    asio::steady_timer t(io, asio::chrono::seconds(5));
    t.async_wait(&print);
    std::cout<<"hh"<<std::endl;
    io.run();
    return 0;
}

因为独立版的asio是header-only,所以使用时只需包含头文件即可

新建CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(asiotest VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(ASIO_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/include)

add_executable(${CMAKE_PROJECT_NAME} main.cpp)
target_compile_options(${CMAKE_PROJECT_NAME} PUBLIC -DASIO_STANDALONE)
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC ${ASIO_INCLUDE})
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC ${ASIO_INCLUDE}/../src/examples/cpp11/chat)
target_link_libraries(${CMAKE_PROJECT_NAME} PUBLIC -lwsock32 -lws2_32)

使用CMake Tools插件编译,运行测试程序。

编译官方样例程序

进入examples路径(cpp11/chat)

cd ./src/examples/cpp11/chat
code ./

新建CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(chat VERSION 0.1.0)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(ASIO_INCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/../../../../include)

file(GLOB files "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
foreach(file ${files})
    get_filename_component(name ${file} NAME)
    string(REPLACE ".cpp" "" exe_name ${name})
    add_executable(${exe_name} ${file})
    target_compile_options(${exe_name} PUBLIC -DASIO_STANDALONE)
    target_include_directories(${exe_name} PUBLIC ${ASIO_INCLUDE})
    target_link_libraries(${exe_name} PUBLIC -lwsock32 -lws2_32)
endforeach()

编译

使用CMake Tools插件编译之后,会在build目录下生成两个可执行程序chat_server.exechat_client.exe

运行

打开两个cmd窗口, 分别输入以下命令:

chat_server.exe 127.0.0.1 50000
chat_client.exe 127.0.0.1 50000