C++ boost-asio-giving您必须在cygwin上的编译器选项中添加-D_u-USE_W32_套接字

C++ boost-asio-giving您必须在cygwin上的编译器选项中添加-D_u-USE_W32_套接字,c++,boost,cygwin,boost-asio,C++,Boost,Cygwin,Boost Asio,我第一次尝试使用boost库。将Eclipse4.3与CDT一起用作环境,并将其用作编译器GCC3.4和Boost1.53 我浏览了很多网站,想找到关于如何设置boost的信息,但它似乎不起作用。当我编译时试图包含boost/asio.hpp,我得到了错误: You must add -D__USE_W32_SOCKETS to your compiler options 然而,我不想使用windows套接字,我想使用posix,所以我真的不知道是什么问题。因为我以后需要在HP-UX上运行该项

我第一次尝试使用boost库。将Eclipse4.3与CDT一起用作环境,并将其用作编译器GCC3.4和Boost1.53

我浏览了很多网站,想找到关于如何设置boost的信息,但它似乎不起作用。当我编译时试图包含boost/asio.hpp,我得到了错误:

You must add -D__USE_W32_SOCKETS to your compiler options
然而,我不想使用windows套接字,我想使用posix,所以我真的不知道是什么问题。因为我以后需要在HP-UX上运行该项目,所以我不想使用特定于Windows的软件。如果我现在使用windows sockets,该程序以后是否可以方便地移植到Unix,或者所有细节都封装在boost中,而且我也不必在意

我使用FOREACH循环测试了一个简单的测试程序,以确认boost本身可以工作,事实就是这样


我还发现:那么,这是否意味着当前不支持此问题,或者我做错了什么?

您尝试执行的操作似乎不受库的支持,以下是受支持的平台

以下平台和编译器已经过测试:

  • Win32和Win64,使用Visual C++ 7.1和Visual C++ 8 .
  • Win32使用MinGW
  • 使用Cygwin的Win32。(必须定义使用W32的套接字。
  • 使用g++3.3或更高版本的Linux(2.4或2.6内核)
  • Solaris使用g++3.3或更高版本
  • 使用g++3.3或更高版本的Mac OS X 10.4
我更强调这一点。如果不可能,您可以尝试中建议的修补程序。然而,翻阅源代码时,我看到出现了几次
#if!已定义(BOOST_WINDOWS)和&!已定义(uuu CYGWIN_uuuuu)
因此,简单地修补
io\u service.hpp
并不能解决任何问题。您可以尝试将
-U_uucygwin_uu
添加到
cxflags
,尽管CYGWIN工具链可能不喜欢这样


完整披露:我不是Windows的家伙,所以希望其他人会加入。

Cygwin发行版中的
libboost-devel
软件包包括Boost.Asio中不在Cygwin上使用Winsock的补丁。我建议将其与gcc4软件包结合使用,后者提供了最新版本的GCC。

Windows Sockets API基于Berkeley Sockets。。。除了是否调用
WSAStartup
之外,您可以编写在这两个服务器上运行的代码,而无需进行任何更改。当然,你应该坚持使用
recv
accept
等,不要使用
WSARecv
wsaaaccept
版本。这就是我目前正在做的。我使用cygwin的一个原因是为了更真实地了解Unix路径。然而,如果我想使用boost,我不想得到令人讨厌的惊喜特别是当我试着适应它的时候,我从来没有用过它。谢谢,这就是我今天想要研究的。如果boost也能在HP-UX上运行,我想我必须仔细查看代码,看看是否能找到合适的交换机。使其与Unix上的行为相同。我已经试过CYGWIN定义了,但这一点并没有帮助。它总是比使用明显的路径更复杂。。。叹息