gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:18 26 4
gpt4 key购买 nike

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com