`
mmdev
  • 浏览: 13243487 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

vc的stdafx文件和C1083、C1010错误(.pch: No such file ...)

 
阅读更多

vc的stdafx文件和C1083、C1010错误

今天在改一个旧的vc6工程(为了节省空间和方便备份,以前收尾时把中间文件都删了),整理了一下文件,归了归类,结果不知怎么的,工程不能编译了,编译什么文件都出现fatal error C1083: Cannot open precompiled header file: 'Debug/xxx.pch': No such file or directory,可是我也没删什么文件,改程序内容,就是把文件挪了挪,看来是vc的工程有点问题,只好查查怎么回事。

用vc新建的工程一般都有这两个文件(空工程除外),其实如果不用mfc,这两个根本没用
StdAfx.cpp 就一句#include "stdafx.h"
StdAfx.h 包含了一些头文件,如果没用mfc就一句有用的#include <stdio.h>
要是你把哪个源文件的#include "stdafx.h"这行删除了,或者从其他工程考过来一个文件没有这行的,编译时一律是fatal error C1010: unexpected end of file while looking for precompiled header directive,这时你只要给该文件开头加个#include "stdafx.h"就了事。
这两个文件除了这点之外还有一个问题,就是这两个文件不能从工程里删除,不然你编译任何一个.cpp/.c的文件都会报fatal error C1083: Cannot open precompiled header file: 'Debug/xxx.pch': No such file or directory,你build也不行,vc会给每一个源文件报这样一个错误。

你再把这两个文件加入工程,一样不行,不论你把他们加在哪,怎么编译就是fatal error C1083,找不到.pch文件。只有新建一个工程,然后把原来的源文件都加过去,要是工程里有很多源文件,进行了很多设置的话,可就麻烦了。

于是,我新建了一个工程就叫test把,看看怎么会出现fatal error C1083的。在新建一个工程后,vc在工程目录里生成了几个文件,包括test.dsp(工程文件)、StdAfx.h、StdAfx.cpp。和主程序源文件test.cpp等。如果你build工程,会在相应的编译目录下(一般为debug或release)产生test.pch、vc60.idb、vc60.pdb、StdAfx.obj和源程序的obj、pdb文件和一个test.exe程序,fatal error C1083就是说没有这个.pch文件,他也不能产生这个文件。那到底vc是怎么产生这个文件的,又是作了什么改动使他不能再产生这个文件的呢?我们将debug目录删除,然后编译test.cpp文件,结果j:/test/test.cpp(4) : fatal error C1083: Cannot open precompiled header file: 'Debug/test.pch': No such file or directory;不行,我build:
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
StdAfx.cpp
Compiling...
test.cpp
Linking...
test.exe - 0 error(s), 0 warning(s)

看来是编译StdAfx.cpp产生了test.pch,然后再编译test.cpp的把;再把debug目录删了,编译StdAfx.cpp就ok,看看debug目录:test.pch、StdAfx.obj、vc60.idb、vc60.pdb。原来是编译StdAfx.cpp产生的pch文件,那从工程里删除这个文件然后在添加这个文件为什么不行呢?肯定是在在删除/添加StdAfx.cpp文件过程中,工程文件不一样了。先关闭工程,把test.dsp备份,然后打开工程,删除StdAfx.cpp文件,在添加,编译,错误C1083,然后关闭工程(保存工程)。fc比较一下刚才备份的dsp和现在的工程文件,发现原来正常的那个工程文件里在SOURCE=./StdAfx.cpp之后多这么一行# ADD CPP /Yc"stdafx.h",而删了StdAfx.cpp再添加的工程就没有,其他的就完全一样。

正常的dsp文件包含StdAfx.cpp的这两行是这样的:
SOURCE=./StdAfx.cpp
# ADD CPP /Yc"stdafx.h"
# End Source File

后记:
vc真是奇怪呀,这行# ADD CPP /Yc"stdafx.h"在新建工程时有,从工程里删除了StdAfx.cpp就没有了,再在工程里加上这个StdAfx.cpp就没有加上。看似删除再添加好像没有动工程,谁知道他来这么一手,艾,要是懂编译懂vc的还好,要是遇上我这样的菜鸟,艾,只有和他奋斗半天才把他搞得稀里糊涂。把他写出来,免得和我一样的菜鸟再费半天劲。

其实这个pch文件是预编译头(PreCompiled Header),下边是msdn里关于PreCompiled Header和/Yc选项的解释。一直都是用集成编译环境的,先是tc,然后是vc,没用过make,没写过makefile,对编译、连接这些东西还不是很懂,高手见笑了。这个选项是可以在工程的设置里设的,具体可以看下边的msdn帮助。

/Yc  (Create Precompiled Header File)
Home | Overview | How Do I | Compiler Options
This option instructs the compiler to create a precompiled header (.PCH) file that represents the state of compilation at a certain point. (To find this option in the development environment, click Settings on the Project menu. Then click the C/C++ tab, and click Precompiled Headers in the Category box.)
Command Line Project Settings Description
/Yc Create Precompiled Header File The compiler compiles all code up to the end of the base source file, or to the point in the base file where #pragma hdrstop occurs. 
/Ycfilename Through Header The compiler compiles all code up to and including the .H file specified in the Through Header text box (filename). 

The precompiled code is saved in a file with a name created from the base name of the file specified with the /Yc option and a .PCH extension. You can also use the /Fp option to specify a name for the precompiled header file.
If you use /Ycfilename (Through Header), the compiler compiles all code up to and including the specified file for subsequent use with the /Yu option.
Note  If the options /Ycfilename and /Yufilename occur on the same command line and both reference, or imply, the same file name, /Ycfilename, takes precedence. This feature simplifies the writing of makefiles.
Example
Consider the following code:
#include <afxwin.h>  // Include header for class library
#include "resource.h" // Include resource definitions
#include "myapp.h"  // Include information specific to this app
...
When this code is compiled with the command
CL /YcMYAPP.H PROG.CPP
the compiler saves all the preprocessing for AFXWIN.H, RESOURCE.H, and MYAPP.H in a precompiled header file called MYAPP.PCH.
See Also  Creating Precompiled Header Files

--------------------------------------------------------------------------------
Send feedback to MSDN.Look here for MSDN Online resources.

来自:http://www.xici.net/b2463/d2405722.htm

分享到:
评论

相关推荐

    fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory。

    fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory. stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的。使用方法:下载压缩包,解压得到两个.h...

    error C1083: 无法打开包括文件: “glaux.h”: No such file or directory

    下载该文件后,分别将glaux.h、glaux.dll、glaux.lib拷贝到VS2013的安装目录即:VS2013/VC/lib ; VS2013/VC/bin ; VS2013/VC/include/GL中,重新编译即可。

    vc的stdafx文件和C1083、C1010错误

    ### vc的stdafx文件和C1083、C1010错误 #### 知识点一:预编译头文件的基本概念与作用 在Visual C++开发环境中,`stdafx` 文件通常指的是预编译头文件(Precompiled Header, PCH)。预编译头文件是一种优化手段,...

    最常见的VC++编译错误信息_fatal_error

    2. Fatal Error C1083:Cannot open include file: 'R…….h': No such file or directory 这是一个常见的编译错误,原因是编译器无法打开包含文件“R…….h”。解决方法是检查该文件是否存在于正确的路径下,如果...

    头文件免费下载

    // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #if !defined(AFX_STDAFX_H__C4B5DA9B_21...

    终于搞懂了,预编译头文件

    - 编译`preh.c`文件,编译器将生成预编译头文件,如`Debug/v13_3.pch`。 4. **使用预编译头文件**: - 在其他C源文件的开头,使用`#include "preh.h"`来利用预编译头文件。 **注意事项:** - 必须确保每个C源文件...

    stdafx.h的作用

    在创建新的Visual C++项目时,如果使用AppWizard,系统会自动生成`stdafx.h`和对应的`stdafx.cpp`文件。`stdafx.h`中包含了项目所需的所有基础头文件,例如`&lt;afxwin.h&gt;`、`&lt;afxext.h&gt;`、`&lt;afxole.h&gt;`、`&lt;afxodlgs.h&gt;...

    VC++常见错误一览表

    fatal error C1083: Cannot open include file: 'R…….h': No such file or directory 这个错误表示编译器无法找到指定的包含文件。这可能是由于文件路径错误或者文件不存在造成的。 - **解决方案**: - 确认文件...

    vc查看某文件被谁独占打开了(不能删除的文件),仿Unlocker.visual c++

    标题中的“vc查看某文件被谁独占打开了(不能删除的文件),仿Unlocker.visual c++”指的是使用Visual C++编程语言开发一个类似Unlocker的工具,用于解决因文件被其他进程占用而无法删除的问题。Unlocker是一款实用程序...

    file_box.zip_file_box.zip

    【标题】"file_box.zip_file_box.zip" 是一个压缩包,包含了多个与文件操作和界面显示相关的源代码文件,以及一个可执行文件LBFile.exe。这个压缩包可能是一个基于Visual C++(VC)开发的项目,用于实现一个文件浏览...

    StdAfx.h头文件下载,编程必备!

    预编译头文件通过编译stdafx.cpp生成,以工程名命名,由于预编译的头文件的后缀是“pch”,所以编译结果文件是projectname.pch。...否则,你将会得到“No such file or directory”这样让你百思不得其解的错误提示。

    vc监控监视文件,目录被修改.visual c++

    在提供的文件列表中,`FileMonitor.cpp`和`FileMonitor.h`可能是实现文件和目录监控的核心代码。`cpp`文件通常包含实现函数的代码,而`h`文件则包含类定义和相关的头文件。这两个文件很可能是定义了一个名为`File...

    wav.rar_DEMO_VC WAV_wav VC

    标题中的"wav.rar_DEMO_VC WAV_wav VC"暗示了这是一个使用VC++(Visual C++)编写的示例程序,用于播放WAV音频文件。WAV是无损音频格式,广泛用于存储各种音频数据。DEMO表明这是一段演示性质的代码,适合初学者学习...

    VC-Dialog效果.zip_dialog

    【标题】"VC-Dialog效果.zip_dialog"是一个与Visual C++(VC)相关的压缩包,主要包含用于展示对话框(Dialog)效果的示例代码和资源文件。对话框在Windows应用程序开发中扮演着重要角色,它是一个独立的窗口,用户...

    FFT.rar_c fft_fft_fft 代码_visual c

    标题中的"FFT.rar_c fft_fft_fft 代码_visual c"表明这是一个关于快速傅里叶变换(FFT)的C语言实现,适用于Visual C++开发环境。快速傅里叶变换是一种高效的计算离散傅里叶变换(DFT)的方法,广泛应用于信号处理、...

    vc文件类型探测程序_根据文件扩展名显示对应的图标

    标题中的"vc文件类型探测程序_根据文件扩展名显示对应的图标"表明这是一个使用Visual C++(简称VC)编写的程序,其主要功能是识别不同文件的扩展名,并根据这些扩展名展示相应的图标。在Windows操作系统中,每个文件...

    头文件下载

    将此文件&lt;stdafx.h&gt;放在头文件目录中,可解决编译失败问题。编译器通过一个头文件stdafx.h来使用预编译头文件。stdafx.h这个头文件名是可以在project的编译设置里指定的。编译器认为,所有在指令#include "stdafx.h...

    keyboard_recorder_source.zip_VC 工具_record vc_vc keyboard_vc++ ke

    标题中的"keyboard_recorder_source.zip_VC 工具_record vc_vc keyboard_vc++ ke"表明这是一个关于键盘记录器(Keyboard Recorder)的源代码包,主要用于VC++(Visual C++)的开发环境。这个工具可能用于记录用户的...

    BBS.rar_telnet winsock vc

    标题"BBS.rar_telnet winsock vc"涉及到的是一个基于VC++开发的telnet登录程序,主要利用了Winsock库来实现网络通信功能。Winsock,全称Windows Socket,是Windows平台下实现TCP/IP协议族接口的API,为应用程序提供...

    解决fatal error C1010 unexpected end of file while looking for precompiled header

    在编程过程中,尤其是在使用Microsoft Visual Studio (VC) 进行C++开发时,可能会遇到一个编译错误:“fatal error C1010: unexpected end of file while looking for precompiled header directive”。这个错误通常...

Global site tag (gtag.js) - Google Analytics