gpt4 book ai didi

c++ - 在cygwin上编译Boost asio出现很多错误

转载 作者:太空宇宙 更新时间:2023-11-04 13:33:15 26 4
gpt4 key购买 nike

我在 cygwin 上训练官方 Boost asio 示例(timer.cpp)。我想编译它而不创建任何 .lib.dll并最大限度地减少对开源分发的依赖。但是当我只复制 asioconfig目录和 asio.hppconfig.hpp文件到libs目录(根据官方手册,Boost asio 只需要Boost config。引用Boost asio dependencies ),并用g++ timer.cpp -Ilibs -o timer 编译示例, 没有 boost/version.hpp 的错误发生。

然后我复制省略的头文件并编译它...再次出现类似的错误。复制……发生……复制……发生……没有尽头。所以我将所有 Boost 库复制到 libs , 并编译它。但是我混淆了很多很多错误和警告。尽管我声明#define __USE_W32_SOCKETS#define _WIN32_WINNT 0x0603 (我在 Windows 8.1 上工作)在 #include <boost/asio.hpp> 之前.以下是最终的编译输出。我累了。

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 上,Compiling timer example of Boost asio with g++ 发生了很多错误和警告。但我是根据官方手册。我该如何解决?

谢谢。

最佳答案

根据Boost Getting Started指南,Boost.Timer 必须构建,并且使用您的代码的用户也需要安装 boost(您的代码或项目不必担心 boost 是如何安装的,只需表明需要它即可)。

您可以使用静态版本来减少外部依赖。我从来没有用 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

关于c++ - 在cygwin上编译Boost asio出现很多错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30679889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com