首页 > 其他分享 >VC6.0编译器中混有.c文件时出现fatal error C1853错误解决办法及extern "C"说明

VC6.0编译器中混有.c文件时出现fatal error C1853错误解决办法及extern "C"说明

时间:2023-09-19 10:08:50浏览次数:61  
标签:文件 extern VC6.0 C++ 编译 编译器 设置 error cpp


第一章的sample1,文中提到由于windows底层代码基本上是用c语言编写的,因此新工程里的CPP文件要改为C文件。



但是在编译时出现错误fatal error C1853: "debug/1_1.pch" is not a precomplied header file with this complier......



这个问题还真是头一次遇到,怎么办?百度一下,解决办法如下:



错误原因:


该错误是因为当项目中混合了 .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:适用于绝大多数文件是 .cpp 或绝大多数文件是.c的情况。在这种情况下,将少数的不同类文件设为不使用预编译头是比较平衡的做法,方法是:对于 VC++6.0,在 FileView 里对要取消预编译头的 .c (或 .cpp) 文件点右键,选择 settings,在弹出的对话框右边选择 category 为 precompiled headers,再设置选项为 not using ...;对于 VS2005,则在 solution explorer 中对相应文件点右键选择 properties,在 precompiled headers 项下设置 not using... 即可。如果需要设置多个文件,则可以按住 Ctrl 键再同时选中这些文件并设置。



方案2:如果受影响的文件比较多,则把它们都设置禁止预编译头的话仍然会使项目总体的编译速度大大降低,得不偿失。这时考虑可以为这组文件建立专用的预编译头。在 VC++ 极早期版本(1.5及以前版本)中是支持单个工程中建立分别针对 .c 和 .cpp 的预编译头的,但之后的版本中只支持单独的预编译头。在这种情况下,我们可以在workspace(或 solution)中建立一个新的静态链接库 (Static Library) 工程,将所有的 .c 文件独立出来加入到该工程中单独编译,这样就可以在该静态链接库中针对 .c 文件创建预编译头。但是这样做在一定程度上需要被独立出来的代码在逻辑上是属于同一模块中的,这样才便于维护。不过从设计的角度来说,这个要求一般是满足的,否则就应考虑下项目的总体设计了:P 最后别忘了设置原项目的依赖项 (dependency) 为独立出来的这个静态库项目。



--------------------------------------------------------------------------------------------------------------------------------------


关于extern "C"说明

C/C++中extern关键字详解

c++中的 extern "C"




标签:文件,extern,VC6.0,C++,编译,编译器,设置,error,cpp
From: https://blog.51cto.com/u_15487030/7521709

相关文章

  • APR does not understand this error code【Svn】
     背景:金蝶云星空协同开发模式,源代码使用的是svn。 业务场景:打开BOS设计器,svn报错:发生时间:2023-09-1808:44:01错误来源:System.Windows.Forms错误信息:Errorrunningcontext:APRdoesnotunderstandthiserrorcode====================================......
  • 奇诡的java.lang.NoClassDefFoundError错误
    13:41:05.570[http-nio-8888-exec-40]ERRORo.a.c.c.C.[.[.[.[dispatcherServlet]-[log,175]-Servlet.service()forservlet[dispatcherServlet]incontextwithpath[]threwexception[Filterexecutionthrewanexception]withrootcausejava.lang.NoClassD......
  • vue3 浏览器“Uncaught runtime errors:” 全屏报错提示关闭
      在项目的vue.config.js中配置module.exports={devServer:{client:{overlay:false//编译错误时,取消全屏覆盖(建议关掉)}}}......
  • mysql连接不上Job for mysqld.service failed because the control process exited wi
    问题:mysql服务器链接不上我们是自己买的服务器搭建的,查看mysql的服务器能不能连的上,看服务是否正常查看进程:top-c;查看磁盘:df-h;linux环境有很多大小,只需要看最大的一个存储就行了,发现可使用的没了,我这图片是清理过后的问题解决先要排查是哪些文件堆满了磁盘,极大的......
  • keepalived 报错/usr/sbin/keepalived: error while loading shared libraries: /lib6
    yuminstallkeepalived的时候提示需要一下包Installing: keepalived                                        x86_64                               1.3.5-19.el7               ......
  • 使用GNU编译器套件链接库
    1、当前目录/home/xuanmiao/Demo/LSPT/Test创建文件prime.h和prime.cprime.hintisprime(longintnumber);prime.cintisprime(longintnumber){longintj;intprime=1;/*Testifthenumberisdivisible,starting*from2*/for(j=2;......
  • 报错error Component name "Index" should always be multi-word vue/multi-word-co
    1、问题说明:在创建组件命名时,引用index.vue的过程中报错;2、报错的原因及分析:其一、报错的全称为:errorComponentname"index"shouldalwaysbemulti-wordvue/multi-word-component-names翻译为:错误组件名称“索引”应始终为多词vue/多词组件名称其二、问题分析:新手在使用......
  • java.lang.ExceptionInInitializerError
    首先,这是匿名内部类初始化的时候报的错,然后这个报错只能代表初始化失败了,具有一定迷惑性,具体什么原因导致的,还得进一步分析建议:1、首先检查配置文件,有可能对应环境的配置文件没有配置(我就是)2、如果配置文件没问题,那就只能每一步都加下日志......
  • 前端项目实战肆佰壹拾陆react-admin和material ui-path重复页面数据error
    letmaterialTypeItem:ISubItem={path:'materialtype',label:<NoneDecorationLinkstyle={{color:'white'}}to='/t_base_materiel_type'>物料类型管理</NoneDecorationLink>}materialManItems.children.push(material......
  • 【ERROR: Could not find a version that satisfies】【ERROR: No matching distribut
    pip包安装出错真是把我烦死了,在yt上学东西,结果一直出这样的错,之前我都是把包下载到本地安装的,这也不是长久之计。然后我试了使用-i,使用--trusted-host,使用--user,使用--upgradepip...全都不管用。后来我想,究竟是什么时候出现这个问题的,好像很久之前就有了...老提示不安全的连......