无法添加定义以提升生成
Unable to add defines to boost build
我正在尝试使用boost构建系统构建boost序列化/文件系统/系统的调试构建。这是我使用的:
b2 serialization filesystem system variant=debug link=static threading=multi
runtimelink=static define=_HAS_ITERATOR_DEBUGGING=0 toolset=msvc-11.0
然而,当我在调试visual studio项目中包含该库时,我仍然会遇到这样的错误:
(basic_iarchive.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in Game.obj
这让我相信我在助推构建中的"定义"没有任何效果。正确的语法是什么?我找不到任何例子,文件中也没有关于这件事的任何其他内容。
编辑:我想强制要求在我的提升构建中定义_HAS_ITERATOR_DEBUGING=0
define=_ITERATOR_DEBUG_LEVEL=0
对我来说很有效。
然后,_HAS_ITERATOR_DEBUGGING
由MS标头基于上述设置定义,因此您不应该尝试直接设置它。
在某些情况下(实时3d),将其设置为0可以显著提高调试性能,因此肯定有一些用例可以证明这一点,即使重新编译所有在其接口中公开STL容器/迭代器的DLL也很痛苦。
_ITERATOR_DEBUG_LEVEL
不是boost的东西,而是MSVC附带的标准库实现的一部分。您必须非常小心地使用此设置的一致值编译构建中的所有内容。在许多情况下,它是由链接器(如您引用的消息)诊断出的违规行为,不幸的是,它可能未被发现。随着它改变了大多数std集合和相关内容的大小和布局,猜猜接下来会发生什么。
默认情况下,它不会设置为任何值,当您包含一些标准标头时,它会查找_DEBUG并将自己设置为2。如果系统中没有任何设置,并且您一直使用_DEBUG,这是一个很好的方法。
关于boost,我不熟悉,但我想你引用的设置会强制宏的值为0。如果是这样,难怪你会有出入。将它设置为2,或者如果你的意思是0,那么继续在你的所有项目中使用它。
相关文章:
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 添加自定义析构函数时,Move 构造函数在派生类中消失
- 定义宏以将前缀 0x 添加到十六进制字符串文本
- TraciMobility::getExternalId 将自定义模块添加到示例中时出错Veins_Inet (Omne
- 如何在自定义对象的<<运算符中添加自定义前缀
- 如何在Qt C++中向自定义控件添加属性?
- CMake 添加和删除宏定义以编译共享库/可执行文件
- ctypes,添加静态库时未定义的符号
- 将自定义样式添加到 QTableview 中添加的按钮
- C++ 添加编译器警告,以错误使用自定义打印/日志功能
- 如何添加自定义关键字以 clang 格式被视为"class"?
- 如何将运算符定义从头文件添加到现有结构?
- 如何根据对象名称将'using namespace'添加到类定义中?
- 向 std::map 添加对象和自定义比较<>
- 如何将自定义角色添加到 QFileSystemModel
- 为什么可以在长度为 0 的数组中添加定义元素 C++.
- visual 是 -Dfoobar 为所有编译器添加定义的标准C++
- 无法添加定义以提升生成