来自优化级别的C++多定义链接器错误
C++ multiple definition linker error from optimization level
首先,我知道这里有几个多重定义错误问题,但我被这个问题难住了。
我有一个正在开发的模块,我一直在调试中构建,即-DDEBUG -g -O0
。现在我想发布-DNDEBUG -Os
,我构建了一个版本,并且我得到了包括在内的几个STL定义的多个定义的链接器错误
- std::basic_ios>::basic_ios()
- std::__throw_bad_alloc()
- std::string::assign(char const*)v
- 等等
我已经检查了我的项目,所有的头文件都有#ifndef保护,头文件中唯一的代码是内联声明的。
在混乱中,我发现我可以使用-DNDEBUG -O0
进行编译,但不能使用任何级别的优化。构建过程包括构建大约20多个对象,然后将它们连接在一起。为什么优化会杀死链接器?我该怎么解决这个问题?
采用TDM MinGW 4.6.1的建筑。
在发布模式下包含MFC调试文件时,此问题也会复制,反之亦然这里可能也是同样的问题——这只是一个胡乱的猜测。
要解决我猜测的原因,请执行以下操作:
#ifdef _DEBUG
#define DEBUG_WAS_DEFINED
//include files that give you multiple definitions here
#endif
//.....
//.....
//rest of code/includes
#ifdef DEBUG_WAS_DEFINED
#undef DEBUG_WAS_DEFINED
#define _DEBUG //revert to previous state
#endif
你可能想看看这个链接:http://www.flounder.com/debug_release.htm,关于混合DLL的部分。
相关文章:
- g++用户定义的动态链接库上的全局new和delete运算符
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 链接 cmake 时出现未定义的引用错误
- 链接阶段出现多重定义错误
- 链接器错误:未定义对"Reference_Genome::seq[abi:cxx11]"的引用
- C++链接时间资源"allocation"而不定义
- Windows 链接器是否使用 LoadLibrary 解析 DLL 中未定义的符号?
- 使用标头保护的多个定义链接错误
- C++不使用"inline"或"static"无类函数的关键字时出现重定义链接错误
- 从自定义链接列表中打印值时,循环陷入无限时
- OpenCV源与CUDA编译生成多个定义链接错误
- 在源文件中定义链接选项C++
- 如果两个静态库包含 pugixml objs,如何避免与 pugixml 的“已定义”链接错误
- 已定义链接器错误
- 来自优化级别的C++多定义链接器错误
- 多重定义:链接时出现错误
- c++多定义链接错误与.h中声明的const
- 使用自定义链接标志构建poco库
- 异步事件:已定义链接器错误[Windows Update API]
- CMake AMRCC + 自定义链接器