C++ 使用asio独立头文件库
这就是我儿子的样子 我从下载了C++ 使用asio独立头文件库,c++,cmake,boost-asio,C++,Cmake,Boost Asio,这就是我儿子的样子 我从下载了asio库。它包含许多必须包含在项目中的头文件。问题是这些标题位于目录中,#include语句与正确的目录不匹配 例如,它们有一个asio/async\u result.hpp文件。该文件包括asio/detail/config.hpp。但是它应该是。/asio/detail/config.hpp 我该怎么办?简单地重命名所有这200个头文件以适应正确的目录结构?为什么他们开箱就错了 您必须首先安装这些标头。在大多数系统上(当然,除了windows之外),有一个典型
asio
库。它包含许多必须包含在项目中的头文件。问题是这些标题位于目录中,#include
语句与正确的目录不匹配
例如,它们有一个asio/async\u result.hpp
文件。该文件包括asio/detail/config.hpp
。但是它应该是。/asio/detail/config.hpp
我该怎么办?简单地重命名所有这200个头文件以适应正确的目录结构?为什么他们开箱就错了
您必须首先安装这些标头。在大多数系统上(当然,除了windows之外),有一个典型的路径,这样的include文件就结束了
项目的构建系统(如Cmake)的工作是在计算机上查找asio并配置编译器,以便它在这些文件夹中查找,如果您这样做,则找到正确的文件
#include <asio/handler_type.hpp>
比如说
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#包括
#包括
有关更多示例,请参阅官方网站。您必须首先安装这些标题。在大多数系统上(当然,除了windows之外),有一个典型的路径,这样的include文件就结束了
项目的构建系统(如Cmake)的工作是在计算机上查找asio并配置编译器,以便它在这些文件夹中查找,如果您这样做,则找到正确的文件
#include <asio/handler_type.hpp>
比如说
#include <boost/asio.hpp>
#include <boost/thread/thread.hpp>
#包括
#包括
有关更多示例,请咨询官方。以下是我的工作更新版
CMakeLists.txt
:
cmake_minimum_required(VERSION 3.3)
project(server_client)
# take a look at the -I command
# this will incude all the header files in your project. So simple
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -I C:/Users/Shiro/Desktop/asio-1.10.6/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS} -static")
# Don't forget this! The libws2_re.lib library is 100% required for windows !
# I also added libwsock32.lib, not sure if thats necessary
# Those .lib files are located at C:\MinGW\lib on my machine
# That directory is located automatically, you don't have to add the full path
link_libraries(ws2_32 wsock32)
set(SOURCE_FILES chat_server.cpp)
add_executable(server_client ${SOURCE_FILES})
在我的源文件.cpp
中,您必须添加
// this is required otherwise asio tries to include
// other boost libraries which you won't have installed
// or you could add a -DASIO_STANDALONE flag right next to -std=c++11 in CMakeLists.txt
#define ASIO_STANDALONE
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501 // windows stuff, not sure what this does
#endif
#include <asio.hpp> // include asio library
//这是必需的,否则asio将尝试包括
//您尚未安装的其他boost库
//或者您可以在CMakeLists.txt中的-std=c++11旁边添加一个-DASIO_独立标志
#定义ASIO_独立
#ifndef\u WIN32\u WINNT
#定义_WIN32_WINNT 0x0501//windows stuff,不确定这是做什么的
#恩迪夫
#include//include asio库
这是我的工作更新CMakeLists.txt
:
cmake_minimum_required(VERSION 3.3)
project(server_client)
# take a look at the -I command
# this will incude all the header files in your project. So simple
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -I C:/Users/Shiro/Desktop/asio-1.10.6/include")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS} -static")
# Don't forget this! The libws2_re.lib library is 100% required for windows !
# I also added libwsock32.lib, not sure if thats necessary
# Those .lib files are located at C:\MinGW\lib on my machine
# That directory is located automatically, you don't have to add the full path
link_libraries(ws2_32 wsock32)
set(SOURCE_FILES chat_server.cpp)
add_executable(server_client ${SOURCE_FILES})
在我的源文件.cpp
中,您必须添加
// this is required otherwise asio tries to include
// other boost libraries which you won't have installed
// or you could add a -DASIO_STANDALONE flag right next to -std=c++11 in CMakeLists.txt
#define ASIO_STANDALONE
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501 // windows stuff, not sure what this does
#endif
#include <asio.hpp> // include asio library
//这是必需的,否则asio将尝试包括
//您尚未安装的其他boost库
//或者您可以在CMakeLists.txt中的-std=c++11旁边添加一个-DASIO_独立标志
#定义ASIO_独立
#ifndef\u WIN32\u WINNT
#定义_WIN32_WINNT 0x0501//windows stuff,不确定这是做什么的
#恩迪夫
#include//include asio库
下面是一个简单的CMake脚本,它使用ASIO standalone构建示例HTTP客户端,设置为生成一个Visual Studio 2019项目
cmake -H. -Bbuild -G "Visual Studio 16 2019" -A x64
(没有推进)。假定源位于文件夹asio-1.12.2中
cmake_minimum_required(VERSION 3.1)
project (asio)
set(CMAKE_CXX_STANDARD 11)
add_definitions(-DASIO_STANDALONE)
add_definitions(-DASIO_HAS_STD_ADDRESSOF)
add_definitions(-DASIO_HAS_STD_ARRAY)
add_definitions(-DASIO_HAS_CSTDINT)
add_definitions(-DASIO_HAS_STD_SHARED_PTR)
add_definitions(-DASIO_HAS_STD_TYPE_TRAITS)
add_definitions(-DASIO_HAS_VARIADIC_TEMPLATES)
add_definitions(-DASIO_HAS_STD_FUNCTION)
add_definitions(-DASIO_HAS_STD_CHRONO)
add_definitions(-DBOOST_ALL_NO_LIB)
add_definitions(-D_WIN32_WINNT=0x0501)
add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
include_directories(asio-1.12.2/include)
add_executable(sync_client asio-1.12.2/src/examples/cpp11/socks4/sync_client.cpp)
下面是一个简单的CMake脚本,它使用ASIO standalone构建示例HTTP客户机,设置为生成一个VisualStudio2019项目
cmake -H. -Bbuild -G "Visual Studio 16 2019" -A x64
(没有推进)。假定源位于文件夹asio-1.12.2中
cmake_minimum_required(VERSION 3.1)
project (asio)
set(CMAKE_CXX_STANDARD 11)
add_definitions(-DASIO_STANDALONE)
add_definitions(-DASIO_HAS_STD_ADDRESSOF)
add_definitions(-DASIO_HAS_STD_ARRAY)
add_definitions(-DASIO_HAS_CSTDINT)
add_definitions(-DASIO_HAS_STD_SHARED_PTR)
add_definitions(-DASIO_HAS_STD_TYPE_TRAITS)
add_definitions(-DASIO_HAS_VARIADIC_TEMPLATES)
add_definitions(-DASIO_HAS_STD_FUNCTION)
add_definitions(-DASIO_HAS_STD_CHRONO)
add_definitions(-DBOOST_ALL_NO_LIB)
add_definitions(-D_WIN32_WINNT=0x0501)
add_definitions(-D_WINSOCK_DEPRECATED_NO_WARNINGS)
include_directories(asio-1.12.2/include)
add_executable(sync_client asio-1.12.2/src/examples/cpp11/socks4/sync_client.cpp)
如何准确安装标题?@Shiro将标题复制到正确的目录中。通常,库附带安装脚本和说明。顺便说一句,今天人们会使用
boost::asio
而不是asio
,因为asio
很久以前就包含在boost中,并且在boost社区中不断开发。大多数开发都发生在asio库中,然后被移植到Boost.Asio。非Boost Asio是一个选项,如果您希望不引入对Boost的依赖,使用尚未登录到Boost.Asio的功能,或者希望尝试网络TS更改。无论它值多少钱,我的经验是,非Boost Asio的稳定版本提供的API与Boost.Asio的稳定版本一样稳定。我如何准确地安装头?@Shiro将它们复制到正确的目录中。通常,库附带安装脚本和说明。顺便说一句,今天人们会使用boost::asio
而不是asio
,因为asio
很久以前就包含在boost中,并且在boost社区中不断开发。大多数开发都发生在asio库中,然后被移植到Boost.Asio。非Boost Asio是一个选项,如果您希望不引入对Boost的依赖,使用尚未登录到Boost.Asio的功能,或者希望尝试网络TS更改。无论它值多少钱,我的经验是,非Boost Asio的稳定版本提供的API与Boost.Asio的稳定版本一样稳定。请注意:Asio
现在是Boost::Asio
的一部分。不要孤立地安装它,而是从boost获取它。Asio中的include指令要求Asio在include路径中可用。通过将include\u directories()
添加到CMakeLists.txt文件,将server\u client
目录添加到include路径是否解决了问题(例如include\u directories(${CMAKE\u CURRENT\u SOURCE\u DIR})
?@TannerSansbury我正在写一个答案question@MarcusMüller Standalone asio仍然存在,并且正在开发成为标准库的一部分,因此我觉得在不久的将来,独立版本将是一个更好的选择。@MarcusMüller如果您不使用Boost的其他部分,可能更倾向于使用独立版本e、 独立版本仅限于页眉,但Boost版本并非如此——如果您不必链接任何Boost库,仅此一点就足以让您更喜欢它。请给未来的读者一个提示:asio
现在是Boost::asio
的一部分。不要孤立地安装它,而是从Boost获取它。asio中的include指令要求Asio在包含路径中可用。将server\u client
目录通过include\u directories()
添加到CMakeLists.txt文件中到包含路径是否解决了问题(例如include\u directories(${C