优化级别的C ++多定义链接器错误

时间:2012-01-24 20:23:29

标签: c++ gcc linker

首先,我明白这里有几个多重定义错误问题,但我对此感到困惑。

我有一个正在开发的模块,我一直在调试-DDEBUG -g -O0。现在我想要发布-DNDEBUG -Os我构建并且我得到了多个STL定义的多个定义的链接器错误,包括

  • std :: basic_ios> :: basic_ios()
  • 的std :: __ throw_bad_alloc()
  • std :: string :: assign(char const *)v
  • 诸如此类

我检查了我的项目,所有头文件都有#ifndef警卫,头文件中唯一的代码是内联声明的。

在搞乱时,我发现我可以使用-DNDEBUG -O0进行编译,但不能进行任何级别的优化。构建过程涉及构建大约2个对象,然后将它们链接在一起。为什么优化会杀死链接器?我该如何解决这个问题?

使用TDM MinGW 4.6.1构建。

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的部分。