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

C++ multiple definition linker error from optimization level

本文关键字:定义 链接 错误 C++ 优化      更新时间:2023-10-16

首先,我知道这里有几个多重定义错误问题,但我被这个问题难住了。

我有一个正在开发的模块,我一直在调试中构建,即-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的部分。