提升 ASIO 示例不构建
Boost ASIO example does not build
我正在尝试做第一个asio教程。 我正在使用Boost 1.60,CLion 1.2和Cygwin。
使用此C++代码:
//
// timer.cpp
// ~~~~~~~~~
//
// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}
而这个CMake文件:
cmake_minimum_required(VERSION 3.3)
project(Test1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#add_compile_options(-D__USE_W32_SOCKETS -D_WIN32_WINNT=0x0501 -lboost_system -lws2_32)
add_compile_options(-D__USE_W32_SOCKETS -D_WIN32_WINNT=0x0501)
set(Boost_INCLUDE_DIR "D:\Downloads\boost_1_60_0\boost_1_60_0")
find_package(Boost)
if (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIR})
endif ()
set(SOURCE_FILES main.cpp)
add_executable(Test1 ${SOURCE_FILES})
我收到以下错误:
error: '__MSABI_LONG' was not declared in this scope BOOST_ASIO_NATIVE_ERROR(ERROR_BROKEN_PIPE)
此错误在不同的宏上重复多次。
所以使用这个答案,代码被更改为:
C++
//
// timer.cpp
// ~~~~~~~~~
//
// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#define __MSABI_LONG(x)
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}
清明
cmake_minimum_required(VERSION 3.3)
project(Test1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_compile_options(-D__USE_W32_SOCKETS -D_WIN32_WINNT=0x0501 -lboost_system -lws2_32)
set(Boost_INCLUDE_DIR "D:\Downloads\boost_1_60_0\boost_1_60_0")
find_package(Boost)
if (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIR})
endif ()
set(SOURCE_FILES main.cpp)
add_executable(Test1 ${SOURCE_FILES})
我收到以下错误
error: expected primary-expression before ',' token BOOST_ASIO_NATIVE_ERROR(EPIPE))
我也多次得到这个。
编辑 1
如果我将代码更改为:
//
// timer.cpp
// ~~~~~~~~~
//
// Copyright (c) 2003-2015 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
#define __MSABI_LONG(x) x
#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
int main()
{
boost::asio::io_service io;
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}
错误输出示例:
D:/Downloads/boost_1_60_0/boost_1_60_0/boost/asio/detail/impl/winsock_init.ipp:36:44: error: cannot convert 'long int*' to 'volatile int*' for argument '1' to 'int _InterlockedIncrement(volatile int*)'
if (::InterlockedIncrement(&d.init_count_) == 1)
^
D:/Downloads/boost_1_60_0/boost_1_60_0/boost/asio/detail/impl/winsock_init.ipp:40:45: error: cannot convert 'long int*' to 'volatile int*' for argument '1' to 'int _InterlockedExchange(volatile int*, int)'
::InterlockedExchange(&d.result_, result);
^
D:/Downloads/boost_1_60_0/boost_1_60_0/boost/asio/detail/impl/winsock_init.ipp: In static member function 'static void boost::asio::detail::winsock_init_base::manual_startup(boost::asio::detail::winsock_init_base::data&)':
if (::InterlockedIncrement(&d.init_count_) == 1)
^
D:/Downloads/boost_1_60_0/boost_1_60_0/boost/asio/detail/impl/winsock_init.ipp:48:40: error: cannot convert 'long int*' to 'volatile int*' for argument '1' to 'int _InterlockedExchange(volatile int*, int)'
::InterlockedExchange(&d.result_, 0);
编辑 2
更改 CMake 代码以在编译器选项中指定正确的操作系统,结果如下:
cmake_minimum_required(VERSION 3.3)
project(Test1)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_compile_options(-D__USE_W32_SOCKETS -D_WIN32_WINNT=0x0A00 -lboost_system -lws2_32)
set(Boost_INCLUDE_DIR "D:\AdrianMattocks\Downloads\boost_1_60_0\boost_1_60_0")
find_package(Boost)
if (Boost_FOUND)
include_directories(${Boost_INCLUDE_DIR})
endif ()
set(SOURCE_FILES main.cpp)
add_executable(Test1 ${SOURCE_FILES})
我收到此错误(由于SO大小限制,这只是一个示例,但这些错误重复了很多次):
D:/Malachi/Downloads/boost_1_60_0/boost_1_60_0/boost/asio/detail/impl/winsock_init.ipp: In static member function 'static void boost::asio::detail::winsock_init_base::startup(boost::asio::detail::winsock_init_base::data&, unsigned char, unsigned char)':
D:/Malachi/Downloads/boost_1_60_0/boost_1_60_0/boost/asio/detail/impl/winsock_init.ipp:36:44: error: [Kno matching function for call to '_InterlockedIncrement(long int*)'
if (::InterlockedIncrement(&d.init_count_) == 1)
D:/Malachi/Downloads/boost_1_60_0/boost_1_60_0/boost/asio/detail/impl/winsock_init.ipp:36:44: error: invalid conversion from 'long int*' to 'volatile long unsigned int*' [-fpermissive]
if (::InterlockedIncrement(&d.init_count_) == 1)
我该如何解决这个问题?
我也遇到了同样的问题,并在尝试编译 Boost ASIO 时设法摆脱了'__MSABI_LONG' was not declared in this scope
和类似的错误。我按照 Boost 库文档单独下载了 Boost。修复错误的过程非常简单:
- 删除编译器路径中对 Boost 库的任何引用并包含选项。
- 运行 Cygwin 安装程序并删除以前出现的任何 Boost 库。
- 重新运行 Cygwin 安装程序并从安装程序安装 Boost 库(您可以搜索 Boost 并有选择地安装您感兴趣的所有软件包)。
- 重新启动 IDE。
因此,Boost由Cygwin"处理",再次编译时我没有再出现任何错误。
希望这有帮助!
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- 提升 ASIO 无法识别计时器对象
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- boost::asio如何生成多个协同程序,然后加入它们
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 缓慢提升ASIO
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 提升 ASIO 1.66 示例无法构建 - async_connect() 需要单个迭代器无法在 VS2010 上链接
- 如何使用boost::asio::spawn构建程序
- 使用waf构建系统将程序与Boost.Asio链接
- 提升 ASIO 示例不构建