Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++ VS2013错误LNK2005的原因是什么:uu xi_ua已在MSVCRT.lib(cinitexe.obj)中定义?_C++_Visual Studio_Visual Studio 2013 - Fatal编程技术网

C++ VS2013错误LNK2005的原因是什么:uu xi_ua已在MSVCRT.lib(cinitexe.obj)中定义?

C++ VS2013错误LNK2005的原因是什么:uu xi_ua已在MSVCRT.lib(cinitexe.obj)中定义?,c++,visual-studio,visual-studio-2013,C++,Visual Studio,Visual Studio 2013,我的解决方案是昨天制定的。今天,除了.hpp和.cpp文件之外,什么都没有改变 Visual Studio 2013的完整错误文本(使用2013年11月的CTP): 就像戳眼睛一样有用 他说: 您正在混合使用/MD编译的代码(使用 使用/MT编译的代码(使用静态CRT库)。 这无法工作,所有源代码文件都必须使用相同的 背景假设您使用的库是用/MD预编译的, 几乎总是正确的设置,您必须使用 这个设置也是如此 我已经检查(并再次检查)解决方案中的所有项目仍然使用相同的运行库多线程DLL用于发布,多线

我的解决方案是昨天制定的。今天,除了.hpp和.cpp文件之外,什么都没有改变

Visual Studio 2013的完整错误文本(使用2013年11月的CTP):

就像戳眼睛一样有用

他说:

您正在混合使用/MD编译的代码(使用 使用/MT编译的代码(使用静态CRT库)。 这无法工作,所有源代码文件都必须使用相同的 背景假设您使用的库是用/MD预编译的, 几乎总是正确的设置,您必须使用 这个设置也是如此

我已经检查(并再次检查)解决方案中的所有项目仍然使用相同的运行库<代码>多线程DLL用于发布,多线程调试DLL用于调试。我做了一个完整的解决方案重建只是为了确定

Subversion日志显示包含所有第三方库的“外部”目录,该目录自2013-12-04年以来未被修改;一个月前。我检查了它们的配置并重新构建了它们

Subversion日志还显示,从昨天起,仅修改了现有的.hpp和.cpp文件。未添加任何新库,未包含任何新的外部标题,也未更改任何项目配置。在7个文件中有超过200行的更改和新代码

有什么问题吗

更新:来自编译器的日志:


解决方案:问题不是/MT/MD编译器标志不正确,而是GLEW库和缺少的
#define GLEW_STATIC
。我将GLEW项目设置更改为使用/Zl(省略默认库名),如本文所述:。

某种原因导致两个运行时都链接到

首先尝试清理(手动)项目创建的所有.obj和.lib文件,然后重新生成它们

如果没有帮助,请设置链接器的
/VERBOSE
标志(“链接器|常规|显示进度”=“在IDE中显示所有进度消息(/VERBOSE)”

然后看看输出;在IDE中,它将位于名为
.log
的文件的构建输出目录中

您将看到搜索每个库的位置以及导致搜索库的对象文件


更新:

日志输出显示,由于正在处理的一个或多个目标文件(可能是库中的目标文件)中的
DEFAULTLIB
指令,正在搜索
LIBCMT.lib

但是,我不清楚日志输出中哪个输入负责-我认为是
glew32s.lib
(其中的
glew.obj
对象)

有关查找哪些
.obj
/
.lib
文件具有
DEFAULTLIB
指令的方法,请参阅


您可以在项目属性(“忽略特定的默认库”)中设置
/NODEFAULTLIB:libcmt.lib
选项。

“…在只更改.hpp和.cpp文件之后…”我敢肯定,我不是唯一对这些更改感兴趣的人。Visual C++允许通过代码> > PracMaMyActudio<代码>,在编译源代码时将链接命令修改为项目。完全可以想象,您所忽略的看似不相关的更改之一通过以前未遇到的标题引入了这样一个指令。@WhozCraig,在整个解决方案中任何地方都不使用#pragma。没有包括新的外部标题。我将在问题中提到同样多的内容。毫无疑问,这两个运行时是相互关联的。如果没有项目配置更改,唯一其他可能的原因是错误的pragma注释(不是你的,其他人的)或一个可怕的脏版本,你说你已经解释了这些。@WhozCraig,我没有添加任何新的#include,但我已经移动了一些#include。我模糊地记得GLEW(其中一个包含的标题)在。。。你给了我一些要调查的东西!GLEW的发布版本配置为作为默认库链接到
libcmt.lib
——至少GLEW源代码发行版中的MSVC 10项目是这样设置的。我不知道为什么这以前不会是个问题,但是链接器的工作方式可能有点神秘,它们处理对象文件输入的顺序以及它们偶然遇到引用时会影响它们查找外部名称的方式。日志长度为3562行!我到底在找什么?我已经上传到这里了,谢谢你的帮助。是GLEW造成了这个问题。
Error   1   error LNK2005: __xi_a already defined in MSVCRT.lib(cinitexe.obj)   C:\Users\drtwox\dev\repos\game\trunk\engine\game\LIBCMT.lib(crt0init.obj)   game
Error   2   error LNK2005: __xi_z already defined in MSVCRT.lib(cinitexe.obj)   C:\Users\drtwox\dev\repos\game\trunk\engine\game\LIBCMT.lib(crt0init.obj)   game
Error   3   error LNK2005: __xc_a already defined in MSVCRT.lib(cinitexe.obj)   C:\Users\drtwox\dev\repos\game\trunk\engine\game\LIBCMT.lib(crt0init.obj)   game
Error   4   error LNK2005: __xc_z already defined in MSVCRT.lib(cinitexe.obj)   C:\Users\drtwox\dev\repos\game\trunk\engine\game\LIBCMT.lib(crt0init.obj)   game
Error   7   error LNK1169: one or more multiply defined symbols found   C:\Users\drtwox\dev\repos\game\trunk\engine\build\x64\Test\game.exe 1   1   game