仅限标题的asio独立版

Cha*_*oon 3 boost-asio

提前抱歉提出一个愚蠢的问题 - 我对这一切都很陌生.

所以我从这里下载了asio ,并尝试#include asio.hpp,但得到了以下错误;

fatal error: boost/config.hpp: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我觉得这很奇怪,因为它假设独立于Boost.我捅了一下,看到我需要定义ASIO_STANDALONE,我很快就做了,只是遇到了更多的错误,它试图#include来自Boost的其他东西.

是否有一个很重要的列表,列出了所有我需要的#define来告诉它是独立的还是什么?这将非常有帮助.

小智 11

这是一个老问题,但是我在Visual Studio 2013和Asio 1.10.6中遇到了同样的问题.在Visual中,没有用于c ++ 11功能的开关或编译器标志.
即使#define ASIO_STANDALONEAsio需要Boost.

解决方案是手动指定我们的编译器符合c ++ 11.只需添加:

#define ASIO_STANDALONE 
#define ASIO_HAS_STD_ADDRESSOF
#define ASIO_HAS_STD_ARRAY
#define ASIO_HAS_CSTDINT
#define ASIO_HAS_STD_SHARED_PTR
#define ASIO_HAS_STD_TYPE_TRAITS

#include <path_to_asio/asio.hpp>
Run Code Online (Sandbox Code Playgroud)


Tan*_*ury 9

正如Asio 网站上所述:

使用C++ 11编译器时,现在可以使用大多数 Asio而不依赖于Boost头文件或库.要以这种方式使用Asio,请ASIO_STANDALONE在编译器命令行上或作为项目选项的一部分进行定义.

因此,即使ASIO_STANDALONE定义了,Asio将在以下情况下使用Boost:


使用asio-1.10.2,以下程序:

#include <asio.hpp>

int main()
{
  asio::io_service io_service;
}
Run Code Online (Sandbox Code Playgroud)

使用-DASIO_STANDALONE -std=c++11编译器标志编译gcc 4.8.1 .如果不指定编译器使用c ++ 11,则在尝试包含Boost头文件时编译将失败.