仅限标题的asio独立版

时间:2014-07-22 00:55:15

标签: boost-asio

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

所以我从here下载了asio,并尝试#include asio.hpp,但是出现了以下错误;

fatal error: boost/config.hpp: No such file or directory

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

是否只有一个大清单,列出了所有我要#define告诉它是独立的东西?这将非常有帮助。

2 个答案:

答案 0 :(得分:11)

这是一个老问题,但是我在使用Visual Studio 2013和Asio 1.10.6时遇到了同样的问题。在Visual中,没有用于c ++ 11功能的开关或编译器标志。
即使#define ASIO_STANDALONE Asio需要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>

答案 1 :(得分:9)

如Asio website所述:

  

使用 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;
}

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