asio none boost 浅踩坑

一晃2年过去了, 记得曾经看过 boost.asio, 现在 asio 已经可以完全脱离 boost 了,
不过它项目里的一些例子还是依赖 boost 的, 比如他 src 文件夹里的 tests 里的 除了 unit , 其他的大多数还是老的例子,
都是直接包含boost的一些头文件, 也就是依赖boost的

编译注意事项

官网说支持c++11的编译器会自动检测, 然后走asio的standalone模式, 测试了一下, 显然不会.
所以 ASIO_STANDALONE 这个宏是必须得自己加上的,

define ASIO_STANDALONE on your Preprocessor Settings (如: g++ -DASIO_STANDALONE) or as part of the project options.

. . .

  • 包含 asio 的目录 (如: g++ -I)
  • In C/C++ Preprocessor Settings, defined:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ASIO_STANDALONE
    ASIO_HAS_STD_ADDRESSOF
    ASIO_HAS_STD_ARRAY
    ASIO_HAS_CSTDINT
    ASIO_HAS_STD_SHARED_PTR
    ASIO_HAS_STD_TYPE_TRAITS

    ASIO_HAS_VARIADIC_TEMPLATES
    ASIO_HAS_STD_FUNCTION
    ASIO_HAS_STD_CHRONO

    BOOST_ALL_NO_LIB
    _WIN32_WINNT=0x0501
    _WINSOCK_DEPRECATED_NO_WARNINGS

还可以参考:

如何fix例子里的boost依赖或已过时的代码

1
2
asio::placeholders::error,
asio::placeholders::bytes_transferred

上面代码里的可替换为 std::placeholders::_1std::placeholders::_2

1
2
3
#include <boost/array.hpp>
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>

这种就可以替换为

1
2
#include <array>
#include <memory>