繁体   English   中英

有没有办法将 boost asio 库与 cygwin 64 位一起使用?

[英]Is there a way to use boost asio library with cygwin 64 bits?

我使用 Windows 11 64 位和 Cygwin 64 位。

我需要使用没有 POSIX 库的 boost asio 构建一个项目。 该项目是使用 Eclipse CDT 工具集构建的。

由于项目的限制,我不能在这里使用 POSIX 库,但在另一个上下文中,我使用这个用 Cygwin 构建的项目,使用从 Cygwin 安装程序安装的 POSIX 库,它运行良好。

命令行中使用了以下定义的符号:

__USE_W32_SOCKETS
_WIN32_WINNT=0x0A00
BOOST_WINDOWS

但它会导致许多错误:

In file included from /usr/include/boost/asio/detail/win_static_mutex.hpp:71,
                 from /usr/include/boost/asio/detail/static_mutex.hpp:23,
                 from /usr/include/boost/asio/detail/win_global.hpp:19,
                 from /usr/include/boost/asio/detail/global.hpp:23,
                 from /usr/include/boost/asio/impl/system_executor.hpp:19,
                 from /usr/include/boost/asio/system_executor.hpp:129,
                 from /usr/include/boost/asio/associated_executor.hpp:21,
                 from /usr/include/boost/asio.hpp:21,
                 from ../src/AsioExample.cpp:10:
/usr/include/boost/asio/detail/impl/win_static_mutex.ipp: In member function 'int boost::asio::detail::win_static_mutex::do_init()':
/usr/include/boost/asio/detail/impl/win_static_mutex.ipp:48:3: error: '_snwprintf' was not declared in this scope; did you mean 'vsniprintf'?
   48 |   _snwprintf(
      |   ^~~~~~~~~~
      |   vsniprintf
/usr/include/boost/asio/detail/impl/win_static_mutex.ipp:115:3: error: expected 'catch' before '__except'
  115 |   __except(GetExceptionCode() == STATUS_NO_MEMORY
      |   ^~~~~~~~
/usr/include/boost/asio/detail/impl/win_static_mutex.ipp:115:3: error: expected '(' before '__except'
  115 |   __except(GetExceptionCode() == STATUS_NO_MEMORY
      |   ^~~~~~~~
      |   (
/usr/include/boost/asio/detail/impl/win_static_mutex.ipp:115:3: error: expected type-specifier before '__except'
  115 |   __except(GetExceptionCode() == STATUS_NO_MEMORY
      |   ^~~~~~~~
/usr/include/boost/asio/detail/impl/win_static_mutex.ipp:115:11: error: expected ')' before '(' token
  115 |   __except(GetExceptionCode() == STATUS_NO_MEMORY
      |   ~~~~~~~~^
      |           )
/usr/include/boost/asio/detail/impl/win_static_mutex.ipp:115:11: error: expected '{' before '(' token
/usr/include/boost/asio/detail/impl/win_static_mutex.ipp:116:63: error: expected ';' before '{' token
  116 |       ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
      |                                                               ^
      |                                                               ;
  117 |   {
      |   ~  

我访问了这个线程: how-to-use-boost-asio-library-with-cygwin-64-bit

但是给定的解决方案不是我想要的。

由于 boost asio 文档表明我们需要添加标志__USE_W32_SOCKETS来构建它,我想这是可能的,但我找不到合适的解决方案。 有人可以提供一些提示来实现这一目标吗?

由于 MSYS2 是基于 Cygwin 的修改版本,我通过安装 MSYS2 和 boost 在此上下文中实现构建。 它运作良好,似乎是最好的方法。

感谢@HolyBlackCat 提醒 MSYS2 存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM