gpt4 book ai didi

c++ - 添加 #include 导致 "has different size"问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:03 24 4
gpt4 key购买 nike

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

(path trimmed)\libboost_system.a(error_code.o): duplicate section .rdata$_ZTSN5boost12noncopyable_11noncopyableE[__ZTSN5boost12noncopyable_11noncopyableE]' has different size

(path trimmed) \libboost_filesystem.a(codecvt_error_category.o): duplicate section .rdata$_ZTSN5boost12noncopyable_11noncopyableE[__ZTSN5boost12noncopyable_11noncopyableE]' has different size

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

#include <boost/asio.hpp>

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

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

我正在使用 MinGW 开发 Win 7。我通过发出以下两个命令一次性构建了所有 boost 库:

bootstrap mingw
b2 toolset=gcc

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

当我删除 ASIO 包含时,我的构建再次运行。

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

最佳答案

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

这要么意味着

  • 您的 boost 构建不一致(它是部分重建的吗?它在构建期间配置不一致吗?您是否部分更新了工具链的一部分?)

  • 您正在为 boost_system 使用二进制文件来自与您用于 boost_filesystem 的版本不同的版本

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

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

关于c++ - 添加 #include <boost/asio.hpp> 导致 "has different size"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35460734/

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