添加 #include < boost/asio.hpp>会导致"has different size"问题

Adding #include <boost/asio.hpp> results in "has different size" problems

本文关键字:问题 has different size hpp lt #include boost 添加 asio gt      更新时间:2023-10-16

在编写一个(到目前为止)非常简单的C++应用程序时(实际上我刚刚开始将我们的应用程序从Qt迁移出来,并主要通过boost替换它的功能)我遇到了"常见"错误,如下所示:

(路径已修剪)\libboost_system.a(error_code.o):重复节 .rdata$_ZTSN5boost12noncopyable_11noncopyableE[__ZTSN5boost12noncopyable_11noncopyableE]' 具有不同的尺寸

(路径修剪) \libboost_filesystem.a(codecvt_error_category.o): 重复部分 .rdata$_ZTSN5boost12noncopyable_11noncopyableE[__ZTSN5boost12noncopyable_11noncopyableE]' 具有不同的尺寸

我显然正在使用系统和文件系统库,直到现在一切都很顺利,当包含 asio 标头时

#include <boost/asio.hpp>

因为这一行代码:return boost::asio::ip::host_name();

正如我从 boosts 文档中了解到的那样,asio 是仅标头库,因此我没有包含任何其他提升库,但libboost_system和libboost_filesystem开始导致这些问题。

我正在使用MinGW开发Win 7。我已经一次性构建了所有增强库,发出以下两个命令:

bootstrap mingw
b2 toolset=gcc

我使用了与现在相同的 MinGW 集来构建我的应用程序。当然,我是否使用这些预构建的库与我的应用程序链接。

当我删除 ASIO 包含时,我的构建再次工作。

为了简单起见,如果我错过了配置的某些重要部分,请发表评论。

这些可见符号源自的两个不同的翻译单元(error_code.o 与 codecvt_error_category.o)尚未使用相同的标志进行编译(或者,不太可能,不同的 boost/noncopyable.hpp 来源)。

这要么意味着

  • 您的 boost 构建不一致(是否部分重建?在构建过程中是否配置不一致?您是否部分更新了工具链的一部分?)

  • 你正在将二进制文件用于与用于boost_filesystem的生成不同的boost_system

可能是参与不一致的库之一是间接的(例如,您可能不知道您的程序间接使用了 boost 文件系统,并且添加 Asio 依赖于不同的 boost 系统)。

您还可以检查是否使用编译程序时使用的相同标志(例如包含#include <boost/asio.hpp>标志)配置提升构建;这在MSVC上尤其重要,其中链接器输入是使用库#pragma自动选择的