您的当前位置:首页正文

VC编译错误解决

2020-09-11 来源:个人技术集锦
预编译头文件解析

错误提示:

Fatal error C1083: Cannot open precompiled header file: ‘rcmq.pch’: Permission denied. 其中rcmq是工程名。

解决方法:

在菜单栏:工程->设置->C/C++中,“预编译头文件”选项卡,选择“不使用预编译头”。即可。

由于在大的工程里,有一些头文件经常使用,通常把它们写入一个文件(比如precompile.h)里,就如MFC程序里的stdafx.h一样,然后在文件precompile.cpp文件里加入#include即可。对于precompile.cpp在项目设置里选择“创建预编译头”,对于其他.cpp文件设置“使用预编译头”。

预编译头的概念:

所谓的预编译头就是把一个工程中的那一部分代码,预先编译好放在一个文件里(通常是以.pch为扩展名),这个文件就被称为预编译头文件。

这些预先编译好的代码可以是任何的C/C++代码,甚至是inline函数,但必须是稳定的,在工程开发的过程中不会被经常改变。如果这些代码被修改,则需要重新编译生成预编译头文件。注意:生成预编译头文件是很耗时间的,预编译头文件通常很大(6~7M)。

为何需要预编译头文件?

编译器是以文件为单位编译的,一个文件经过修改后,会重新编译整个文件,当然在这个文件里包含的所有头文件中的东西(.eg Macro, Preprocesser)都要重新处理一遍。VC的预编译头文件保存的正是这部分信息,以避免每次都要重新处理这些头文件。

预编译头的作用:

提高编译速度。有了预编译头文件,当编译文件时不需要每次都编译不需要经常改变的代码。

预编译头的使用:

(1)必须指定一个头文件,该文件包含我们不会经常改变的代码和其他的头文件,然后我们用这个头文件来生成一个预编译头文件(.pch文件),VC6中默认为StdAfx.h。这个文件可以是任何名字。(可以查看StdAfx.h的内容)。

(2)由于一个头文件是不能编译的,再指定一个cpp文件来生成.pch,VC6中默认为StdAfx.cpp,这个文件中只有一句代码:#include \"stdafx.h\"。

(3)用/Yc编译开关来指定StdAfx.cpp来生成一个.pch文件,通过/Fp编译开关来指定生成的.pch文件的名字。

(4)打开project->Setting->C/C++对话框,把Category指向Precompiled Header。在左边的树形视图里选择整个工程,在右下角(Project Options)中可以看到/Fp “debug/工程名.pch。在左边的树形视图里选择StdAfx.cpp,在右下角(Source File Option)中可以看到Project Settings, and /Yc\"stdafx.h\"。一个工程中只能有一个文件可以有YC开关,VC就是根据这个选项把StdAfx.cpp编译成一个obj文件和一个pch文件。选择其他的cpp文件时,可

以看到“User precompiled header file(.pch)。

注意:如果使用了/Yu,即使用了预编译,应在每个.cpp文件的最开头,包含指定产生.pch文件的.h文件(默认为StdAfx.h)。如果未包含这个文件,则错误:“Unexpected file end.”。

因篇幅问题不能全部显示,请点此查看更多更全内容