添加 #include < boost/asio.hpp>会导致"has different size"问题
Adding #include <boost/asio.hpp> results in "has different size" problems
在编写一个(到目前为止)非常简单的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
自动选择的
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- "Field has incomplete type"引用自己的类的问题
- 添加 #include < boost/asio.hpp>会导致"has different size"问题