您的位置:首页 > 其它

error MSB4018 “CL”任务意外失败

2015-11-24 21:28 393 查看

vs2010:error MSB4018 “CL”任务意外失败

vs2010:error MSB4018 “CL”任务意外失败

今天VS2010编译一个工程突然报“error MSB4018 “CL”任务意外失败”,下面还有一大堆,什么tracker错误,网上找了几种解决方法:

1、ramdisk启用错误。

2、临时文件在目录的根上,比如T:改成T:\temp就可以了。

但是,目前这次不是这个原因,具体啥原因还真没找到。只是把默认的temp目录里面的东西给删除了。然后重新清理,再编译。

真得郁闷。

注意:

其实上面解决了问题,只是治标之法,今天又出现了这个问题,而且用上述方法仍然没有解决,之后穷尽了各种方法,都没有解决好,即使任何一个其它的工程都无法使用,不知道为什么。

后来在编译一个LIB时候,报一个CPP

vs2010:error MSB4018 “CL”任务意外失败

今天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),然后就被下面这个编译链接问题搞得很是郁闷。

详细输出:

[cpp] view
plaincopy

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 定位到下面的行:

[html] view
plaincopy

<CL Condition="'%(ClCompile.PrecompiledHeader)' != 'Create' and '%(ClCompile.ExcludedFromBuild)'!='true'">

好像和预处理有关,但实在是看不出所以然。再Google,有些说是类似这样的文件中的设置,把上面那行中的 true 改为false,不行。

然后放弃查看这个文件,一点点对比了有问题的这个项目和其他项目的设置情况。最后设置完全相同,但问题依旧。

经历了很多尝试,又 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”,问题竟然没有了。。。。看了还是和环境有关,所以各位在万不得已的情况下也重装系统吧。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: