VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)
出现错误:error C1853: “Debug\ConsoleApplication1.pch”预编译头文件来自编译器的早期版本号。或者预编译头为 C++ 而在 C 中使用它(或相反)
相关资料:
http://blog.sina.com.cn/s/blog_674cc1fd0100jirq.html
假设按上面方式调用还不成功,把.c文件的预编译去掉
右击.c文件,属性 ->点击左側 预编译头。右側 预编译头选项选择 不使用预编译头
对于为什么要去掉预编译头呢,可參考http://blog.csdn.net/shellching/article/details/5260590
当 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 (or vice 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. 经常让人摸不着头脑。
应该说。在新版中的这个提示是有所改进的。只是在网上搜索一番,对这个问题往往都是建议对整个项目取消预编译头的设置。这显然不是一个好的解决方式。
对于一个比較大的project来说,使用预编译头能够使总的编译时间大大降低。
因而保留预编译头的设置才是比較好的解决方式。搜索 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及曾经版本号)中是支持单个project中建立分别针对 .c 和 .cpp 的预编译头的。但之后的版本号中仅仅支持单独的预编译头。
在这样的情况下。我们能够在workspace(或
solution)中建立一个新的静态链接库 (Static Library) project,将全部的 .c 文件独立出来增加到该project中单独编译,这样就能够在该静态链接库中针对 .c 文件创建预编译头。
可是这样做在一定程度上须要被独立出来的代码在逻辑上是属于同一模块中的,这样才便于维护。只是从设计的角度来说。这个要求通常是满足的,否则就应考虑下项目的整体设计了:P 最后别忘了设置原项目的依赖项 (dependency) 为独立出来的这个静态库项目。
VS中c++文件调用c 函数 ,fatal error C1853 预编译头文件来自编译器的早期版本号,或者预编译头为 C++ 而在 C 中使用它(或相反)的更多相关文章
- 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)转
vs2010的mfc项目中编译c语言出现错误: "...预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)" 解决方法: 建工程时 建立空项目 ...
- 【VS开发】fatal error C1853: "Debug\sift.pch"预编译头文件来自编译器的早期版本
fatal error C1853: "Debug\sift.pch"预编译头文件来自编译器的早期版本 <pre id="best-content-12991040 ...
- 如何在sqlite3连接中创建并调用自定义函数
#!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...
- 【转】预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
用VC++ 2008 编写C语言程序,编译出现错误: 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 解决方法: 建工程时 建立空项目 或者在项目设置里关闭预编 ...
- VS2005 MFC 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
当 Visual C++ 项目启用了预编译头 (Precompiled header) 功能时,如果项目中同时混合有 .c 和 .cpp 源文件,则可能收到 C1853 编译器错误:fatal err ...
- 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)(转)
用VC++ 2008 编写C语言程序,编译出现错误: 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) 解决方法: 建工程时 建立空项目 或者在项目设置里关闭预编 ...
- afx.h(78): fatal error C1083: 无法打开包括文件: “new.h”: No such file or directory
vs2015新建mfc工程,编译错误: D:\program files (x86)\microsoft visual studio 14.0\vc\atlmfc\include\afx.h(78): ...
- fatal error C1083: 无法打开包括文件: “SDKDDKVer.h”: No such file or directory(转)
fatal error C1083: 无法打开包括文件: “SDKDDKVer.h”: No such file or directory 解决办法:(Vs2013中) 项目--右键--属性--配置属 ...
- fatal error C1083: 无法打开包括文件:“qedit.h”: No such file or directory
VS2010编译 DirectShow一些项目时遇到 错误:fatal error C1083: 无法打开包括文件:“qedit.h”: No such file or directory 解决方法: ...
随机推荐
- Java I/O 笔记
1. Java常用I/O类概述 2. 文件I/O 你可以根据该文件是二进制文件还是文本文件来选择使用FileInputStream(FileOutputStream)或者FileReader(File ...
- memset和wmemset用法记录
char cBuffer[50] ;TCHAR wBuffer[50]; 1.将cBuffer初始化为空格memset(cBuffer, ' ', sizeof(cBuffer));第三个参数为字节数 ...
- windows 添加自助白名单
由于公司分部用的是动态IP,又需要用到总部的OA系统,OA完全开放对外不安全,所以写了这个工具 项目地址 https://github.com/cainiaoit/Windows-firewall-s ...
- Fiddler抓包8-打断点(bpu)【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/fiddler/ 前言 先给大家讲一则小故事,在我们很小的时候是没有手机的,那时候跟女神 ...
- js正则常用的一些东西
mdn的正则文档 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_Expressions js正则表达式的分 ...
- Matlab,C++存取二进制
1,Matlab存储二进制 load Wall.dat %读取数据,数组名为Wall fid=fopen('Wall','wb'); %打开一个文件,二进制写入 fwrite(fid,Wall','f ...
- Laravel中setAttribute和queryScope的用法
setAttribute使用场景: 数据在存入数据库的时候需要进行预先处理,每次都会写很多重复代码,使用 setAttribute之后就可以在数据填充时自动完成. setAttribute的写法:se ...
- 【bzoj2839】【集合计数】容斥原理+线性求阶乘逆元小技巧
(上不了p站我要死了,侵权度娘背锅) Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取 ...
- 基于Bootstrap的表格插件bootstrap-table
写在前面: 表格在项目中是使用比较多的,bootstrap-table插件也是非常好用,而且表格页面也比较好看.这里也简单的记录下. 下面直接看demo吧,代码中都注释了,有些用法,这里没有用到,需要 ...
- 一致性hash-java实现treemap版
把不同号段的数据储存在不同的机器上,以用来分散压力.假如我们有一百万个QQ号,十台机器,,如何划分呢? 最简单粗暴的方法是用QQ号直接对10求余,结果为0-9 分别对应上面的十台机器.比如QQ号为 2 ...