Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用asio独立头文件库_C++_Cmake_Boost Asio - Fatal编程技术网

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