Visual C++ 中fatal error C1083的解决办法

来源:互联网 发布:android计算器源码 编辑:程序博客网 时间:2024/05/18 00:14
Visual C++ 中fatal error C1083的解决办法

最近在做VC开发的过程中遇到了这个烦人的问题,查阅了很多资料也没有一个统一的说法,所以把所有可能出现的情况都总结一下,供以后参考。

 

症状:

fatal error C1083: Cannot open compiler intermediate file“C:/WINDOWS/Temp/xxxx” No such file or directory

致命错误 C1083 无法打开编译器中间文件:
< tmp
目录 >; / < tmpfile >: 没有的文件或目录

 

         原因之一:有可能是环境变量设置不对。user用户变量和system变量TEMPTMP的变量值都为%SystemRoot%/TEMP ,在正常机器上,这是没有问题的,但是有的用户机器的系统盘是手动更改成C盘的,本来应该为E盘。

         解决办法:将user用户变量和system变量TEMPTMP的变量值都改为C:/WINDOWS/Temp

 

         原因之二:和预编译头的设置有关。

         解决办法:打开Settings对话框,左边的Settings For中选中Release,底下的TreeView中选中StdAfx.cpp,右边选中C/C++标签页,CategoryPrecompiled Headers,底下选Create precompiled headerThrough headerStdAfx.h。左边的TreeView中依次选中工程中其他所有的cppPrecompiled Headers都选中Use precompiled header fileThrough headerStdAfx.h。最后,“OK”“Rebuild All”

 

         原因三该错误是由 TMP 环境变量的末尾分号引起的。例如:TMP=C:/TMP;

         解决办法:从命令行设置 TMP 环境变量正确方法是,如下所示:C:/>SET TMP=C:/TMP

非常重要的环境字符串不能结束用分号 (;),因为编译器将中间文件名追加到 TMP 路径。 通过从路径中删除分号,编译器可以正确地创建该文件。

         in additionTMP variable should be fully qualified path and not relative pathC:TMP for example may cause compiler to issue similar errorsbut C:/TMP will always work correctly TMP environment variable also should be set to that has sufficient space for compiler 's temporary files drive

 

另附上Windows帮助文档片段:

 

RESOLUTION
To work around this error, specify the /Yc compiler option switch to create a pre-compiled header file.

STATUS
Microsoft has confirmed this to be a problem in the Microsoft products listed above. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.

This problem does not occur in Microsoft C/C++ 32-bit compiler version 8.0, included with Visual C++ 32-bit Edition version 1.0.

MORE INFORMATION
         The following code example demonstrates this problem.

Sample Code - TEST.C
/*
* Compiler options needed: /Fptest.pch to demonstrate error
*/
#include <stdio.h>
void main()
{
   printf("Hello, world/n");

+++++++++++++++++++++++++++++++++++++++++

使用vc的人经常遇到fatal error C1083: Cannot open precompiled header file: 'Debug/xxx.pch': No such file or directory,
怎么rebuild all都不行,这是删除了一些中间文件的结果。所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是
以.pch为扩展名的),这个文件就称为预编译头文件这些预先编译好的代码可以是任何的
C/C++代码--------甚至是inline的函数,但是必须是稳定的,在工程开发的过程中不会
被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。
现在的编译器都有Time stamp的功能,编译器在编译整个工程的时候,它
只会编译那些经过修改的文件,而不会去编译那些从上次编译过,到现在没有被修改过
的文件。编译器是以文件为单位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含的所有
头文件中的东西(.eg Macro, Preprocesser )都要重新处理一遍。VC的预编译头文件保存的正是这部分信息。以避免每次都要重新处理这些头文件。
预编译头文件的作用当然就是提高便宜速度了,有了它你没有必要每次都编译那些不需要经常改变的代码。编译性能当然就提高了。
要使用预编译头,指定一个头文件,这个头文件包含我们不会经常改变的
代码和其他的头文件,然后我们用这个头文件来生成一个预编译头文件(.pch文件)
AppWizard生成的MFC Dialog Based程序的预编译头文件。因为AppWizard
会为我们指定好如何使用预编译头文件,默认的是StdAfx.h,其实是可以改变的。
因为一个头文件是不能编译的。所以我们还需要一个cpp文件来生成.pch 文件。这个文件默认的就是StdAfx.cpp。在这个文件里只有一句代码就是:#include “Stdafx.h”。
用/Yc编译开关来指定StdAfx.cpp来生成一个.pch文件,通过/Fp编译开关来指定生成的pch文件的名字。,/Yc的作用就是指定这个文件来创建一个Pch文件。
/Yc后面的文件名是那个包含了稳定代码的头文件,一个工程里只能有一个文件的可以有YC开关。VC就根据这个选项把 StdAfx.cpp编译成一个Obj文件和一个PCH文件。
正常的dsp文件包含StdAfx.cpp的这两行是这样的:
SOURCE=./StdAfx.cpp
# ADD CPP /Yc"stdafx.h"
# End Source File

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hbu_dcf/archive/2010/01/29/5268252.aspx

原创粉丝点击