首先,我明白这里有几个多重定义错误问题,但我对此感到困惑。
我有一个正在开发的模块,我一直在调试-DDEBUG -g -O0
。现在我想要发布-DNDEBUG -Os
我构建并且我得到了多个STL定义的多个定义的链接器错误,包括
我检查了我的项目,所有头文件都有#ifndef警卫,头文件中唯一的代码是内联声明的。
在搞乱时,我发现我可以使用-DNDEBUG -O0
进行编译,但不能进行任何级别的优化。构建过程涉及构建大约2个对象,然后将它们链接在一起。为什么优化会杀死链接器?我该如何解决这个问题?
使用TDM MinGW 4.6.1构建。
答案 0 :(得分:0)
在发布模式下包含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的部分。