2013-04-29 55 views
2

我想第一次使用boost库。使用CDT作为环境Eclipse 4.3以及编译器gcc 3.4和boost 1.53。提升asio给你你必须添加-D__USE_W32_SOCKETS到你的cygwin的编译器选项

我在浏览各个网站以查找有关如何设置提升的信息,但似乎无法正常工作。当我编译试图包括升压/ asio.hpp我得到的错误:

You must add -D__USE_W32_SOCKETS to your compiler options 

不过,我不希望使用Windows套接字,我想使用POSIX,所以我真的不知道是什么错误。由于我需要该项目以后在HP-UX上运行,因此我不想访问特定于Windows的项目。如果我现在使用Windows套接字,程序以后可以轻松地移植到Unix上,或者所有的细节都封装在boost中,而且我不必在乎呢?

我使用FOREACH循环测试了一个简单的测试程序,以确认boost本身的工作原理,情况就是如此。

我也发现这个:https://svn.boost.org/trac/boost/ticket/7881所以这意味着这个问题目前不支持,或者我做错了什么?

+1

Windows套接字API基于Berkeley套接字...您可以编写运行在两者上的代码,除了调用'WSAStartup'外,没有任何更改。当然,你应该坚持'recv'和'accept'等,而不是使用'WSARecv'或'WSAAccept'版本。 – 2013-04-29 20:22:52

+0

这就是我目前正在做的事情。我使用cygwin的一个原因是为了保持更加真实的Unix路径。但是,如果我想使用提升,我不想得到令人讨厌的惊喜。 :)特别是我试图让它感觉舒适,从未使用过它。 – Devolus 2013-04-30 07:28:40

回答

2

好像你正在试图做的是不是库支持什么,在documentation states下支持的平台

The following platforms and compilers have been tested:

  • Win32 and Win64 using Visual C++ 7.1 and Visual C++ 8.0.
  • Win32 using MinGW.
  • Win32 using Cygwin. (__USE_W32_SOCKETS must be defined.)
  • Linux (2.4 or 2.6 kernels) using g++ 3.3 or later.
  • Solaris using g++ 3.3 or later.
  • Mac OS X 10.4 using g++ 3.3 or later.

下面加上强调是我的。如果这是不可能的,你可以尝试linked ticket中建议的补丁。但是,仔细查看源代码,我发现了几个出现的#if !defined(BOOST_WINDOWS) && !defined(__CYGWIN__),所以简单修补io_service.hpp将解决任何问题并不明显。您可以尝试将-U__CYGWIN__添加到CXXFLAGS,尽管cygwin工具链可能不会那样。

全面披露:我不是一个Windows的家伙,所以希望别人会附和

+0

谢谢,这就是我今天想看的东西。如果boost还适用于HP-UX,我想我必须查看代码并查看是否可以找到适当的开关。使其在Unix上表现得像Unix一样。我已经尝试过__CYGWIN__定义,但这并不能帮助。使用明显的路径总是比较复杂...... *叹* – Devolus 2013-04-30 07:30:33

1

libboost-devel包在Cygwin的分布包括补丁Boost.Asio的在Cygwin不使用Winsock的。我建议与gcc4软件包一起尝试,它提供了更新版本的GCC。

相关问题