【问题标题】:Adding #include <boost/asio.hpp> results in "has different size" problems添加 #include <boost/asio.hpp> 会导致“大小不同”问题
【发布时间】:2016-05-29 09:29:11
【问题描述】:

在编写一个(到目前为止)非常简单的 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 是仅标头库,因此我没有包含任何其他 boost 库,但 libboost_system 和 libboost_filesystem 开始导致这些问题。

我正在使用 MinGW 开发 Win 7。我一口气构建了所有的 boost 库,发出以下两个命令:

bootstrap mingw
b2 toolset=gcc

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

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

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

【问题讨论】:

    标签: c++ c++11 boost mingw32


    【解决方案1】:

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

    这要么意味着

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

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

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

    您还可以检查是否使用与编译程序相同的标志配置了 boost 构建(例如,包含 #include &lt;boost/asio.hpp&gt; 的标志);这在 MSVC 上尤为重要,其中使用库 #pragmas

    自动选择链接器输入

    【讨论】:

    • 感谢您的回答。我 100% 确定两个库都来自同一个来源。我从 boost.org 下载了 zip 文件,并按照我的问题中的描述运行了构建。但是正如您对构建所建议的那样,实际上我知道有一个区别,但对我来说似乎并不那么重要(感到尴尬)。在构建 boost 时,我使用了与 Qt 捆绑的 mingw32-make.exe。为了构建我的应用程序,我使用来自 Msys 1.0.10 包的 make.exe。这真的是原因吗? (目前无法确认,因为我不在办公室)。
    • 这绝对是您要寻找的东西。 Google C++ ABI 和 ODR 违规。你会很高兴这被链接器捕捉到了。
    • 好吧。早上第一件事,我将使用另一个 make 重建 boost 库并检查所有其他构建参数以确认。会回到这里让你知道。谢谢!
    • 所以我只是使用与我的应用程序相同的工具链重建了 boost,替换了库但仍然出现相同的错误。
    • 我也反过来测试了它。使用 Qt Bundle 构建我的应用程序并链接使用 msys 制作的新 Boost 库并且工作正常(不包括 asio),所以我猜 make 实用程序不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    相关资源
    最近更新 更多