vs2010:error MSB4018 “CL”任务意外失败
今天VS2010编译一个工程突然报“error MSB4018 “CL”任务意外失败”,下面还有一大堆,什么tracker错误,网上找了几种解决方法:
1、ramdisk启用错误。
2、临时文件在目录的根上,比如T:改成T:\temp就可以了。
但是,目前这次不是这个原因,具体啥原因还真没找到。只是把默认的temp目录里面的东西给删除了。然后重新清理,再编译。
真得郁闷。
注意:
其实上面解决了问题,只是治标之法,今天又出现了这个问题,而且用上述方法仍然没有解决,之后穷尽了各种方法,都没有解决好,即使任何一个其它的工程都无法使用,不知道为什么。
后来在编译一个LIB时候,报一个CPP
今天VS2010编译一个工程突然报“error MSB4018 “CL”任务意外失败”,下面还有一大堆,什么tracker错误,网上找了几种解决方法:
1、ramdisk启用错误。
2、临时文件在目录的根上,比如T:改成T:\temp就可以了。
但是,目前这次不是这个原因,具体啥原因还真没找到。只是把默认的temp目录里面的东西给删除了。然后重新清理,再编译。
真得郁闷。
注意:
其实上面解决了问题,只是治标之法,今天又出现了这个问题,而且用上述方法仍然没有解决,之后穷尽了各种方法,都没有解决好,即使任何一个其它的工程都无法使用,不知道为什么。
后来在编译一个LIB时候,报一个CPP的OBJ文件找不到,这才想起来,原来为了看这个CPP的宏展开文件,将其C++选项中的预处理选项中的产生到预处理文件中的否选成了是。当时为了简单,只设备了这一个CPP的这个选项,后来又整体设置成了否,以为就设置回去了,结果今天一看,仍然没有。将其设置为否。再编译成功。
为什么?暂时不得而知。
错误描述:C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(744,5): error MSB8011: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.
形成原因:个人理解是由于在WIN7以上版本,只有管理员权限才可以运行regsvr32.exe程序,也就是说只有管理员权限才能够注册控件或者DLL。
解决方法:
一、运行VS2010时,右键以管理员权限运行,不要直接打开VS2010。
二、工程-->Propertier-->Linker-->General-->Register Output-->NO。
前天把项目从VS2005升级到vs2010,解决了一些由于使用boost库的问题(VS2010的库已经集成了部分boost),然后就被下面这个编译链接问题搞得很是郁闷。
详细输出:
- 1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error MSB4018: “CL”任务意外失败。
- 1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error MSB4018: System.AggregateException: 发生一个或多个错误。 ---> System.ArgumentOutOfRangeException: 不是有效的 Win32 FileTime。
- 1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error MSB4018: 参数名: fileTime
- ...
Google、百度一番,大都是说使用Ramdisk引起的问题,把环境变量 TEMP TMP 不设在根目录就可以了,但我的很明显不是这种情况。
1.我的电脑根本没使用过 RamDisk 来管理系统认不到的内存。
2.我的工程包含了好几个项目,但其他项目都没有此问题
3.有问题的项目重新生成没有问题,但只要改动任何代码再生成时就会出现上述错误。可能网上说的那些也是这样,只是都没提到重新生成行不行。
另外,网上还有说:要确保源文件对应的头文件都在目录树中。但我试过仍然不行。
看来只有结合自己的情况认真分析了。
双击下面提示的出错信息,转向了出错的文件。是微软自己的文件:
C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.targets 定位到下面的行:
- <CL Condition="'%(ClCompile.PrecompiledHeader)' != 'Create' and '%(ClCompile.ExcludedFromBuild)'!='true'">
然后放弃查看这个文件,一点点对比了有问题的这个项目和其他项目的设置情况。最后设置完全相同,但问题依旧。
经历了很多尝试,又 google 了下,还是没找到答案,最后又回到了微软那个奇怪的文件上。
既然是预处理,那我就尝试有关预处理的设置吧。
最后解决方法:
项目属性->C/C++-> 预编译头 选项卡中的 "预编译头" 由 "使用(/Yu)" 改为 "创建(/Yc)",然后重新生成,问题解决。实际上也应该算是重新生成了吧
编译时每次都创建预编译头太费时间,vs2010本来就感觉很慢,而且其它项目都是设置为 "使用(/Yu)",唯独这个项目不行呢?一般项目设置中默认是 /Yu, 只是源文件中的stdafx.cpp 默认是 Yc,其它文件全是Yu。有了 stdafx.cpp 这个文件,stdafx.h中包含的东西才只需一次编译生成(Yc),以后就不用重新编译了。
项目属性中设定为 Yc后,所有cpp文件都自动变为Yc,无疑会大大增加每次编译的时间,但没有其他办法也只有先这样了。
到底什么原因不得而知,以后有空再研究。如有知道的达人请不吝赐教。
注:后来为节省编译时间,我把除 stdafx.cpp 的其它所有文件的属性都手动改为 Yu,这样我感觉实际上和在项目中设置 Yu的效果是一样的。开始能编译,感觉就这样了,但后来还是会碰到前面的那种该死的错误,就又把整个项目的属性改成了Yu
补充更新:后来实在无法容忍每次重新编译的时间之长,我换了台电脑,并把项目属性中的预编译头改为默认的 “Yu”,问题竟然没有了。。。。看了还是和环境有关,所以各位在万不得已的情况下也重装系统吧。。。