Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化级别的C++多定义链接器错误_C++_Gcc_Linker - Fatal编程技术网

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

优化级别的C++多定义链接器错误,c++,gcc,linker,C++,Gcc,Linker,首先,我知道这里有几个多重定义错误问题,但我被这个问题难住了 我有一个我正在开发的模块,我一直在调试中构建,即-DDEBUG-g-O0。现在,我想创建一个release-DNDEBUG-Os版本,我得到了多个STL定义的链接器错误,包括 标准::基本ios>::基本ios std::__扔_坏_所有 std::string::assignchar const*v 等等 我已经检查了我的项目,所有头文件都有ifndef保护,头文件中唯一的代码声明为内联 在混乱中,我发现我可以使用-DNDEBUG-

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

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

标准::基本ios>::基本ios std::__扔_坏_所有 std::string::assignchar const*v 等等 我已经检查了我的项目,所有头文件都有ifndef保护,头文件中唯一的代码声明为内联

在混乱中,我发现我可以使用-DNDEBUG-O0进行编译,但不能使用任何级别的优化。构建过程包括构建大约24个对象,然后将它们链接在一起。为什么优化会杀死链接器?我怎样才能解决这个问题


使用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

您可能希望查看以下链接:,即关于混合DLL的部分。

在发布模式下包含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

您可能想看看这个链接:,关于混合DLL的部分。

就像我在问题中说的,我找不到问题文件是什么。有什么帮助来找出哪些文件是有问题的孩子吗?@AndrewRedd您是否包括任何MFC头文件?当然,在找到源代码之前,您可以尝试删除文件。我认为混合dll问题与此无关。我完全是从clean构建的,而不是将调试和发布混为一谈。我相信有一些,隐藏在一些包含的标题中。有没有办法确定呢?我想我找到了有问题的文件。它还包括windows.h,但我仍然不明白为什么优化会触发此问题,或者如何解决它。正如我在问题中所说,我找不到问题文件是什么。有什么帮助来找出哪些文件是有问题的孩子吗?@AndrewRedd您是否包括任何MFC头文件?当然,在找到源代码之前,您可以尝试删除文件。我认为混合dll问题与此无关。我完全是从clean构建的,而不是将调试和发布混为一谈。我相信有一些,隐藏在一些包含的标题中。有没有办法确定呢?我想我找到了有问题的文件。它还包括windows.h,但我仍然不明白为什么优化会触发这个问题,或者如何绕过它。