【发布时间】:2015-06-06 06:53:04
【问题描述】:
我在 cygwin 上训练官方 Boost asio 示例(timer.cpp)。我想在不创建任何.lib 或.dll 的情况下编译它,并尽量减少对开源分发的依赖。但是当我只复制asio和config目录和asio.hpp和config.hpp文件到libs目录时(根据官方手册,Boost asio只需要Boost config。参考Boost asio dependencies),然后编译以g++ timer.cpp -Ilibs -o timer 为例,出现没有boost/version.hpp 的错误。
然后我复制省略的头文件并编译它...类似的错误再次发生。复制……发生……复制……发生……没有尽头。所以我将所有 Boost 库复制到libs,并编译它。但是我混淆了很多很多错误和警告。尽管我在#include <boost/asio.hpp> 之前声明了#define __USE_W32_SOCKETS 和#define _WIN32_WINNT 0x0603(我正在使用Windows 8.1)。以下是最终编译输出。我累了。
In file included from /usr/include/w32api/winsock2.h:56:0,
from libs/boost/asio/detail/socket_types.hpp:38,
from libs/boost/asio/detail/impl/winsock_init.ipp:22,
from libs/boost/asio/detail/winsock_init.hpp:125,
from libs/boost/asio/io_service.hpp:28,
from libs/boost/asio/basic_io_object.hpp:19,
from libs/boost/asio/basic_socket.hpp:20,
from libs/boost/asio/basic_datagram_socket.hpp:20,
from libs/boost/asio.hpp:21,
from src/main.cpp:4:
/usr/include/w32api/psdk_inc/_fd_types.h:100:2: warning: #warning "fd_set and associated macros have been defined in sys/types. This can cause runtime problems with W32 sockets" [-Wcpp]
#warning "fd_set and associated macros have been defined in sys/types. \
^
In file included from libs/boost/asio/detail/impl/posix_tss_ptr.ipp:24:0,
from libs/boost/asio/detail/posix_tss_ptr.hpp:76,
from libs/boost/asio/detail/tss_ptr.hpp:27,
from libs/boost/asio/detail/call_stack.hpp:20,
from libs/boost/asio/impl/handler_alloc_hook.ipp:19,
from libs/boost/asio/handler_alloc_hook.hpp:80,
from libs/boost/asio/detail/handler_alloc_helpers.hpp:21,
from libs/boost/asio/detail/bind_handler.hpp:19,
from libs/boost/asio/detail/wrapped_handler.hpp:18,
from libs/boost/asio/io_service.hpp:24,
from libs/boost/asio/basic_io_object.hpp:19,
from libs/boost/asio/basic_socket.hpp:20,
from libs/boost/asio/basic_datagram_socket.hpp:20,
from libs/boost/asio.hpp:21,
from src/main.cpp:4:
libs/boost/asio/error.hpp:87:31: error: a function call cannot appear in a constant-expression
BOOST_ASIO_NATIVE_ERROR(ERROR_BROKEN_PIPE),
总结:
第一季度。 Boost asio 不仅需要 Boost 配置,还需要其他一些 Boost 库(我猜)。如何查看Boost asio的库依赖?
第二季度。在 cygwin 上,使用 g++ 编译 Boost asio 的计时器示例会出现很多错误和警告。但我是按照官方手册的。我该如何解决?
谢谢。
【问题讨论】:
-
您不应该乱搞 Boost 安装。为什么不简单地按照教程并准确指定要编译的库(如果有)?
-
@Chnossos 用于跨平台。如果我在 Windows 上使用 'b2' 编译 Boost,并且我使用了多个
.lib或.dll文件,则它仅适用于 Windows。