【转载】fatal error C1853解决方法

当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和.cpp 源文件,则可能收到 C1853 编译器错误:fatal error C1853: 'pjtname.pch'precompiled header file is from a previous version of the compiler,or the precompiled header is C++ and you are using it from C (orvice versa)(致命错误C1853: “filename.pch”预编译头文件来自编译器的早期版本,或者预编译头为C++而在C 中使用它(或相反))。 

该错误是因为当项目中混合了 .cpp 和 .c文件时,编译器会对它们采取不同的编译方式(主要是因为对函数声明的处理方式不同),因而不能共用一个预编译头文件。在 VC++中,默认的预编译头文件是针对 C++ 的 (stdafx.h 和 stdafx.cpp),当然也可以创建针对 C的预编译头。有趣的是,在旧版的 VC++ 中,这个错误的提示很具有误导性:fatal error C1853: 'xxx.pch'is not a precompiled header file created with this compiler.常常让人摸不着头脑。应该说,在新版中的这个提示是有所改进的。不过在网上搜索一番,对这个问题往往都是建议对整个项目取消预编译头的设置,这显然不是一个好的解决方案。对于一个比较大的工程来说,使用预编译头可以使总的编译时间大大减少。因而保留预编译头的设置才是比较好的解决方案。搜索MSDN,针对不同的情况,可以有不同的解决方案:

本人是用方法1解决的

方案1:适用于绝大多数文件是 .cpp或绝大多数文件是.c的情况。在这种情况下,将少数的不同类文件设为不使用预编译头是比较平衡的做法,方法是:对于 VC++6.0,在FileView 里对要取消预编译头的 .c (或 .cpp) 文件点右键,选择 settings,在弹出的对话框右边选择category 为 precompiled headers,再设置选项为 not using ...;(对于 VS2005,则在solution explorer 中对相应文件点右键选择 properties,在 precompiled headers 项下设置not using... 即可。如果需要设置多个文件,则可以按住 Ctrl 键再同时选中这些文件并设置)PS:解释如下点击项目点击属性 然后选择C/C++   预编译头 创建使用头文件不使用预编译头文件(解决方案资源管理器-右击需要排除的c或cpp文件]-弹出属性菜单-展开C/C++-预编译头-创建/使用预编译头-选择不适用预编译头)

方案2:影响的文件比较多,则把它们都设置禁止预编译头的话仍然会使项目总体的编译速度大大降低,得不偿失。这时考虑可以为这组文件建立专用的预编译头。在VC++ 极早期版本(1.5及以前版本)中是支持单个工程中建立分别针对 .c 和 .cpp的预编译头的,但之后的版本中只支持单独的预编译头。在这种情况下,我们可以在workspace(或solution)中建立一个新的静态链接库 (Static Library) 工程,将所有的 .c文件独立出来加入到该工程中单独编译,这样就可以在该静态链接库中针对 .c文件创建预编译头。但是这样做在一定程度上需要被独立出来的代码在逻辑上是属于同一模块中的,这样才便于维护。不过从设计的角度来说,这个要求一般是满足的,否则就应考虑下项目的总体设计了:P最后别忘了设置原项目的依赖项 (dependency) 为独立出来的这个静态库项目。
fatal error是指程序发生了严重的错误导致无法继续执行,通常会导致程序直接崩溃或者出现严重的异常。解决fatal error方法如下: 1. 检查错误日志:fatal error通常会产生错误日志,我们可以通过查看错误日志来获取详细的报错信息,以便更好地定位错误原因。 2. 代码逻辑检查:检查可能存在错误的代码逻辑,如循环、条件判断、函数调用等,确保代码的正确性。特别是要关注可能导致程序崩溃的地方,如内存操作、文件操作等。 3. 调试工具:使用调试工具进行调试,可以设置断点、观察变量的值,以及执行过程中的跟踪,帮助我们更好地理解程序运行时的情况,进而根据调试信息找出并解决问题。 4. 检查依赖包和库:fatal error也可能是由于依赖包或库的问题引起的,因此我们需要检查是否安装了必要的依赖,并且版本是否匹配。 5. 硬件和操作系统检查:某些fatal error可能是由于硬件故障或者操作系统问题导致的,这时候我们需要检查硬件设备的连接情况以及操作系统是否更新或出现了异常。 6. 找相关资料和寻求帮助:通过搜索相关资料或咨询专业人士,可以获取他人的经验和建议,帮助我们更好地解决fatal error问题。 在解决fatal error的过程中,需要耐心和持续跟踪调试,同时也要学会从错误中吸取教训,不断提高自己的编程能力和错误处理能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值