提前抱歉提出一个愚蠢的问题 - 我对这一切都很陌生。
所以我从here下载了asio,并尝试#include asio.hpp,但是出现了以下错误;
fatal error: boost/config.hpp: No such file or directory
我认为这很奇怪,因为它假设独立于Boost。我捅了一下,看到我需要定义ASIO_STANDALONE,我很快就做了,只是遇到了更多的错误,试图#include Boost的其他东西。
是否只有一个大清单,列出了所有我要#define告诉它是独立的东西?这将非常有帮助。
答案 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头文件时编译会失败。