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

标签 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 构建。

最佳答案

在 Release模式下包含 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 的部分。

关于来自优化级别的 C++ 多重定义链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8993590/

相关文章:

c - 重定向歧义

c - 这种对有效类型规则的使用是否严格遵守?

ios - ld : file not found: linker command failed with exit code 1

c++ - 如何在 OpenCV 中删除 mouseCallback

c++ - 沿枪实现缩放

android - 如何提高android中的OpenCV人脸检测性能?

c++ - LNK2019错误,未解析的外部符号

ruby-on-rails - 有什么方法可以更改 gem 的 gcc 编译选项吗?

objective-c - 访问 NSSpeechSynthesizer 时出现链接错误

delphi - 在 Delphi 中编译/链接未使用的函数/过程