如何使用 C++ 独立 ASIO 库
How to use the C++ standalone ASIO library
我正在尝试在 Windows10 上使用 asio 库,这里是一个简单的测试代码块:
#include <iostream>
#include <asio.hpp>
using std::cout;
int main()
{
std::cout << "hello asio\n";
asio::io_context ioc;
asio::steady_timer tmer(ioc, asio::chrono::seconds(1));
tmer.wait();
cout << "hi asio\n";
ioc.run();
return 0;
}
with Visual Studio 2017. 要打开开发人员命令提示符,我使用以下命令
C:\Program Files (x86)\Microsoft Visual Studio17\Community\Common7\Tools>vsdevcmd
然后,根据asio doc,我在asio src文件夹下运行命令nmake -f Makefile.msc
。但我收到一个错误:
Microsoft (R) Program Maintenance Utility Version 14.16.27025.1
Copyright (C) Microsoft Corporation. All rights reserved.
cl -Fetests\latency\tcp_client.exe -Fotests\latency\tcp_client.obj -nologo -EHac -GR -I. -I../include -O2 -MD -I../../boost_1_34_1 -D_WIN32_WINNT=0x0501 -DBOOST_ALL_NO_LIB -DBOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING tests\latency\tcp_client.cpp -link -opt:ref
tcp_client.cpp
../include\asio/detail/config.hpp(26): fatal error C1083: Cannot open include file: 'boost/config.hpp': No such file or directory
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.16.27023\bin\HostX86\x86\cl.EXE"' : return code '0x2'
Stop.
图书馆似乎需要 boost/config.hpp。我真的试图避免使用提升。有什么方法可以让我在 windows 10 上使用独立的 asio 吗?
我尝试使用 vcpkg,但事实证明我只需要下载该库并创建一个 cmake 文件即可。
cmake_minimum_required(VERSION 3.12)
project(asio)
add_definitions(-DASIO_STANDALONE -D_WIN32_WINNT=0x0501)
# -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB)
# include_directories(${VCPKG_DIR}//asio_x86-windows//include)
include_directories(./../libs/asio-1.12.2/include)
add_executable(asio s5.cpp)
要在没有任何 boost 库的情况下使用 asio,您必须在某个时候定义 ASIO_STANDALONE
。最好的是在您的 Visual Studio 项目中,或者在任何包含 asio header.
之前的代码中
以下命令行似乎有效。这将是对 boost.asio 独立文档的很好补充。
$ nmake STANDALONE=1 -f Makefile.msc
我花了一些时间才弄清楚这一点,因为我从未使用过 NMAKE,尽管我已经使用 MS 编译器开发了很多 Windows 的东西。这是非常适合 MAKE 过程的 not-so-good 工具。
虽然 make 命令只是执行测试。没有生成任何库。只需包括 headers...
我正在尝试在 Windows10 上使用 asio 库,这里是一个简单的测试代码块:
#include <iostream>
#include <asio.hpp>
using std::cout;
int main()
{
std::cout << "hello asio\n";
asio::io_context ioc;
asio::steady_timer tmer(ioc, asio::chrono::seconds(1));
tmer.wait();
cout << "hi asio\n";
ioc.run();
return 0;
}
with Visual Studio 2017. 要打开开发人员命令提示符,我使用以下命令
C:\Program Files (x86)\Microsoft Visual Studio17\Community\Common7\Tools>vsdevcmd
然后,根据asio doc,我在asio src文件夹下运行命令nmake -f Makefile.msc
。但我收到一个错误:
Microsoft (R) Program Maintenance Utility Version 14.16.27025.1
Copyright (C) Microsoft Corporation. All rights reserved.
cl -Fetests\latency\tcp_client.exe -Fotests\latency\tcp_client.obj -nologo -EHac -GR -I. -I../include -O2 -MD -I../../boost_1_34_1 -D_WIN32_WINNT=0x0501 -DBOOST_ALL_NO_LIB -DBOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING tests\latency\tcp_client.cpp -link -opt:ref
tcp_client.cpp
../include\asio/detail/config.hpp(26): fatal error C1083: Cannot open include file: 'boost/config.hpp': No such file or directory
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio17\Community\VC\Tools\MSVC.16.27023\bin\HostX86\x86\cl.EXE"' : return code '0x2'
Stop.
图书馆似乎需要 boost/config.hpp。我真的试图避免使用提升。有什么方法可以让我在 windows 10 上使用独立的 asio 吗?
我尝试使用 vcpkg,但事实证明我只需要下载该库并创建一个 cmake 文件即可。
cmake_minimum_required(VERSION 3.12)
project(asio)
add_definitions(-DASIO_STANDALONE -D_WIN32_WINNT=0x0501)
# -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB)
# include_directories(${VCPKG_DIR}//asio_x86-windows//include)
include_directories(./../libs/asio-1.12.2/include)
add_executable(asio s5.cpp)
要在没有任何 boost 库的情况下使用 asio,您必须在某个时候定义 ASIO_STANDALONE
。最好的是在您的 Visual Studio 项目中,或者在任何包含 asio header.
以下命令行似乎有效。这将是对 boost.asio 独立文档的很好补充。
$ nmake STANDALONE=1 -f Makefile.msc
我花了一些时间才弄清楚这一点,因为我从未使用过 NMAKE,尽管我已经使用 MS 编译器开发了很多 Windows 的东西。这是非常适合 MAKE 过程的 not-so-good 工具。
虽然 make 命令只是执行测试。没有生成任何库。只需包括 headers...