我在cygwin上训练官方Boost asio示例(timer.cpp)。我想编译它而不创建任何.lib
或.dll
,并最大限度地减少依赖于开源的分发。但是当我只将asio
和config
目录以及asio.hpp
和config.hpp
文件复制到libs
目录时(根据官方手册,Boost asio只需要Boost配置。请参阅Boost asio dependencies),并使用g++ timer.cpp -Ilibs -o timer
编译示例,出现没有boost/version.hpp
的错误。
我复制省略的标题并编译它...类似的错误再次发生。复制......发生......复制......发生......它没有尽头。所以我将所有Boost库复制到libs
,并进行编译。但我混淆了许多错误和警告。尽管我在#define __USE_W32_SOCKETS
之前声明了#define _WIN32_WINNT 0x0603
和#include <boost/asio.hpp>
(我正在使用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),
要点:
Q1。 Boost asio需要一些其他Boost库,不仅需要Boost配置,还要求所有(我猜)。如何检查Boost asio的库依赖?
Q2。在cygwin上,使用g ++编译Boost asio的计时器示例会发生许多错误和警告。但我是根据官方手册。我该如何解决?
感谢。
答案 0 :(得分:0)
根据Boost Getting Started指南,Boost.Timer 必须构建,用户编写代码也需要安装boost(您的代码或项目必须&#39;担心如何安装boost,juste表示需要它。
您可以使用静态版本来减少外部依赖性。 我从来没有用Cygwin做过,但是使用MinGW,它应该是等价的。
进入boost根目录,打开cmd.exe。
包含编译器可执行文件的bin/
文件夹必须位于您的路径中。如果不是,请先键入:
SET PATH=%PATH%;<path to your cygwin bin folder here>
现在输入:
bootstrap gcc
然后,当bootstrap
完成时:
b2 toolset=gcc variant=debug,release link=static threading=multi