添加#include <boost asio.hpp =“”>会导致“有不同大小”的问题

时间:2016-02-17 15:21:47

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

编写(迄今为止)非常简单的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();

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

我正在使用MinGW在Win 7上工作。我已经按照两个命令一次性构建了所有的升级库:

bootstrap mingw
b2 toolset=gcc

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

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

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

1 个答案:

答案 0 :(得分:1)

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

这意味着

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

  • 您使用的boost_system二进制文件与您用于boost_filesystem

  • 的版本不同

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

您还可以检查是否使用与编译程序相同的标志配置了boost版本(包含#include <boost/asio.hpp>的标记);这对于使用库#pragma

自动选择链接器输入的MSVC尤其重要