Visual Studio 2008 常见错误解决之设置预编译头

合集下载

vs2008头文件错误提示

vs2008头文件错误提示

vs2008头文件错误提示d:\program files\microsoft visual studio 9.0\vc\include\new. h(60) : error C2065: “_In_opt_”:未声明的标识符d:\program files\microsoft visual studio 9.0\vc\include\new. h(60) : error C2146: 语法错误 : 缺少“)”(在标识符“new_handler”的前面)d:\program files\microsoft visual studio 9.0\vc\include\new. h(60) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符d:\program files\microsoft visual studio 9.0\vc\include\new. h(60) : error C2491: “std::set_new_handler”:不允许 dllimport 数据的定义d:\program files\microsoft visual studio 9.0\vc\include\new. h(60) : error C2059: 语法错误 : “)”d:\program files\microsoft visual studio 9.0\vc\include\new. h(85) : error C2065: “_Size”:未声明的标识符d:\program files\microsoft visual studio 9.0\vc\include\new. h(118) : error C2143: 语法错误 : 缺少“;”(在“__cdecl”的前面) d:\program files\microsoft visual studio 9.0\vc\include\new. h(119) : error C2143: 语法错误 : 缺少“;”(在“__cdecl”的前面) d:\program files\microsoft visual studio 9.0\vc\include\new. h(119) : error C2065: “_In_opt_”:未声明的标识符d:\program files\microsoft visual studio 9.0\vc\include\new. h(119) : error C2146: 语法错误 : 缺少“)”(在标识符“_PNH”的前面)d:\program files\microsoft visual studio 9.0\vc\include\new. h(119) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符d:\program files\microsoft visual studio 9.0\vc\include\new. h(119) : error C4430: 缺少类型说明符 - 假定为 int。

VisualStudio2008安装64位编译组件

VisualStudio2008安装64位编译组件

VisualStudio2008安装64位编译组件背景:因为一些项目是C#写就的,逼得本来只装VC的我要加装C#套件。

我机器上的VS2008/2010都只装了VC套件。

VS2008的补丁已经打到SP2,VS2010打到SP1。

VS2008增加C#套件的过程:1、先加装VS2008的C#套件。

装入VS2008.iso,安装程序没进入套件选择的步骤,就弹出对话框提示异常“A problem has been encountered while loading the setup components. Canceling setup.”。

google到解决方案:“”。

简而言之就是,增删套件不要通过源盘VS2008.iso进行,而是通过windows控制面板上的“程序和功能”(/Win7的说法)进行。

2、DAEMONtools保留着装入的VS2008.iso在H:盘上。

开始从“程序和功能”增删VS2008,增加其C#套件。

待安装程序进入到套件选择的步骤,勾上以增加C#套件,点击“Next”,却又有提示异常“Setup is looking for file SQLSysClrTypes.msi. Please insert Microsoft Visual Studio Team System 2008 Team Suite – ENU disk 1 now.”。

但是,在VS2008.iso(/亦即H:)里找不到大神SQLSysClrTypes.msi。

3、DAEMONtools继续保留着装入的VS2008.iso在H:盘上。

装入VS2008's patch.iso(/应该是VS2008的SP2了)至I:盘,SQLSysClrTypes.msi就在I:\vs90sp1里。

但是,安装程序老蠢死掘不认此目录,再叠加弹出一对话框叫我“确认”。

拷贝到其它目录下再哄她,也不行。

艹!4、Google到解决方案:“”。

关于VC编译错误fatal error C1083的解决办法

关于VC编译错误fatal error C1083的解决办法

关于VC编译错误fatal error C1083的解决办法这时因为该模块没有包括预编译头文件“stdafx.h”的缘故。

VC用一个stdafx.cpp包含头文件stdafx.h,然后在stdafx.h里包含大部分系统头文件,这样编译时VC就通过编译stdafx.cpp把大部分系统头文件预编译进来了,在Debug目录下有一个很大的文件*.pch,这里就存储了预编译信息。

根据这个原理,如果这个pch损坏了或被删除了,系统重新编译时就会抱怨“cannot openprecompiled header file debug/*.pch”。

这时怎么解决这个问题呢,打开Project-》Setting对话框选C++页,将Category下拉式列表框选中Precompiled Headers,最简单的办法就是选中第一个选项“Not using....",这样就根本不用预编译头也不去寻找pch文件,就不会出错了,但是这样做的后果是每次编译、连接都化更多的时间。

第二个选项”Automatic ...",然后在“Through header”力填上stdafx.h,这样如果没有pch文件系统会自动生成一个pch,如果有的话就使用这个pch,这个选项是比较“智能”的。

第三个选项是强行创建一个pch文件,第四个选项是直接使用pch文件。

当然“Throughheaders”里都填stdafx.h了。

1.nafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argvnafxcwd.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argcnafxcwd.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctypenafxcwd.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctypenafxcwd.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype解决办法:PROJECT->SETING->C/C++->PREPROCESSOR->定义 _AFXDLL,完毕。

PCL配置即常见问题

PCL配置即常见问题

PCL配置即常见问题1 下载把与VS版本对应PCL的AllInOne包下载下来。

要下对安装包,需要了解安装包的命名的含义,以下⾯的⼀个AllInOne包的名字为例。

PCL-1.8.0-AllInOne-msvc2013-win32.exe其中,1.8.0表⽰的PCL的版本号,然后2013表⽰这个安装包只适⽤于VS2013中使⽤,其它VS版本不⾏,最后win32表⽰这个安装包只能⽤来开发32位的程序。

再以下⾯的安装包名字为例。

PCL-1.7.2-AllInOne-msvc2012-win64.exe这个安装包是PCL1.7.2版本的,其只能⽤在VS2012上,然后使⽤在64位的VS项⽬开发中。

注意⼀定要下载正确与VS版本以及想要开发的程序位数对应的AllInOne包。

2 安装整个安装过程需要注意以下三点,其它默认即可:1. 安装路径最好不要包括中⽂;2. 建议勾选上“AddPCLtothesystemPATHforallusers”;3. 安装时,会提⽰安装OpenNI,这个建议安装在PCL安装路径的3rdParty下的OpenNI2⽂件夹中。

3 新建⼀般在VS⾥创建⼀个C++的控制台项⽬,根据⾃⼰的意愿设置⼀下项⽬名和路径。

在新建过程中注意以下两点,其它默认即可:1. 去掉“预编译头(P)”前的勾2. 去掉“安全开发⽣命周期(SDL)检查(C)”前的勾。

4 配置在配置项⽬属性环节,需要了解的是编译出来的程序分为两种32位和64位。

不同位数的程序需要对应版本的lib和dll才能编译成功。

这⾥想要编译什么位数的程序,下载对应位数的PCL即可。

不同位数的程序⼜分为:Debug和Release。

默认⽣成的是Debug程序。

编译Debug版本的程序需要Debug版本的lib和dll,编译Release版本的程序需要Release版本的lib和dll。

这些lib和dll在PCL的安装路径路径⾥有。

如果需要⽣成上述四种程序,需要分别设置对应的项⽬属性表。

VC中常见的一些编译链接错误的解决

VC中常见的一些编译链接错误的解决

VC中常见的一些编译链接错误的解决VC中常见的一些编译链接错误的解决2010-03-22 15:59问题1:Linking...nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadexnafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadexlibcd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main答VC++默认的工程设置是单线程的,而你使用了多线程,所以要修改设置。

选择菜单“Project|settings”,选择C/C++标签,在CODEGENERATION分类中选择除SINGLE-THREADED的其他选择。

比如可以在Use run-time library中选择Debug Multithreaded 或者multithreaded其中,Single-Threaded 单线程静态链接库(release版本) Multithreaded 多线程静态链接库(release版本) multithreaded DLL 多线程动态链接库(release版本)Debug Single-Threaded 单线程静态链接库(debug版本)Debug Multithreaded 多线程静态链接库(debug版本)Debug Multithreaded DLL 多线程动态链接库(debug版本)单线程: 不需要多线程调用时, 多用在DOS环境下多线程: 可以并发运行静态库: 直接将库与程序Link, 可以脱离MFC库运行动态库: 需要相应的DLL动态库, 程序才能运行release版本: 正式发布时使用debug版本: 调试阶段使用问题2fatal error C1010: unexpected end of file while looking for precompiled header directive该如何解如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的Settings,选择C/C++选项卡,从Category组合框中选中Precompiled Headers,选择Not Using Precompiledheaders。

解决VisualC++编译器中混合.c文件时收到C1853预编译头错误的方法

解决VisualC++编译器中混合.c文件时收到C1853预编译头错误的方法

解决VisualC++编译器中混合.c文件时收到C1853预编译头错误的方法第一篇:解决Visual C++ 编译器中混合 .c 文件时收到 C1853 预编译头错误的方法解决Visual C++ 编译器中混合.c 文件时收到 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(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.常常让人摸不着头脑。

应该说,在新版中的这个提示是有所改进的。

不过在网上搜索一番,对这个问题往往都是建议对整个项目取消预编译头的设置。

这显然不是一个好的解决方案。

Visual+C+++中fatal+error+C1083的解决办法

Visual+C+++中fatal+error+C1083的解决办法

Visual C++ 中fatal error C1083的解决办法文/蹇安安最近在做VC开发的过程中遇到了这个烦人的问题,查阅了很多资料也没有一个统一的说法,所以把所有可能出现的情况都总结一下,供以后参考。

症状:fatal error C1083: Cannot open compiler intermediate file:“C:\WINDOWS\Temp\xxxx” No such file or directory或致命错误 C1083:无法打开编译器中间文件:< tmp 目录 >; \ < tmpfile >: 没有的文件或目录原因之一:有可能是环境变量设置不对。

user用户变量和system变量TEMP 和TMP的变量值都为%SystemRoot%\TEMP ,在正常机器上,这是没有问题的,但是有的用户机器的系统盘是手动更改成C盘的,本来应该为E盘。

解决办法:将user用户变量和system变量TEMP和TMP的变量值都改为C:\WINDOWS\Temp原因之二:和预编译头的设置有关。

解决办法:打开Settings对话框,左边的Settings For中选中Release,底下的TreeView中选中StdAfx.cpp,右边选中C/C++标签页,Category选Precompiled Headers,底下选Create precompiled header,Through header 填StdAfx.h。

左边的TreeView中依次选中工程中其他所有的cpp,Precompiled Headers都选中Use precompiled header file,Through header填StdAfx.h。

最后,“OK”、“Rebuild All”。

原因三:该错误是由 TMP 环境变量的末尾分号引起的。

例如:TMP=C:\TMP;解决办法:从命令行设置 TMP 环境变量正确方法是,如下所示:C:\>SET TMP=C:\TMP非常重要的环境字符串不能结束用分号 (;),因为编译器将中间文件名追加到 TMP 路径。

VS预编译头文件(关于errorc1083的问题解决)

VS预编译头文件(关于errorc1083的问题解决)

VS预编译头⽂件(关于errorc1083的问题解决)
报错
fatal error C1083:cannot open precompield header file 'Debug/*.pch':No such file or dir
原理
头⽂件的编译原理,就是把⾃⼰的内容替换掉对应的#include处。

头⽂件的出现,给书写程序带来了极⼤的便利,但到了windows时代,⼏乎所有windows程序都要包含windows.h,⽽它却硕⼤⽆⽐,#include处展开时,编译就很慢。

到了mfc时代就更恶劣了。

于是,这些⼏乎所有cpp都必须包含、且稳定不经常改变(否则要重新预编译)的头⽂件,被提取出来,只编译⼀遍,⼤家都能使⽤,这就是预编译头。

优点:速度⼤⼤提⾼,*.pch就是编译后的预编译头⽂件;
缺点:假定的是所有cpp都使⽤,因此再编译你的cpp时,就会将预编译头中编译完成的部分加载到内存,此时如果发现你cpp中居然没包含预编译头,就没办法把这部分从内存中请出去,编译失败;
使⽤
/Yc:即creat,创建预编译头,将你的预编译cpp设置成/Yc;
/Yu:即use,使⽤预编译头,将你其他cpp设置成/Yu,并在cpp最开头包含你预编译头的h⽂件(如stdafx.h,也可以⾃定义)
参考链接:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Visual Studio 2008 常见错误解决之预编译头
今天照着MSDN中的例子写了一个程序,莫名其妙的出现了这样的错误(难道官方的代码也不可靠!?):
warning C4627: “#include <iostream>”: 在查找预编译头使用时跳过
warning C4627: “#include "MathFuncsDll.h"”: 在查找预编译头使用时跳过
fatal error C1010: 在查找预编译头时遇到意外的文件结尾。

是否忘记了向源中添加“#include "stdafx.h"”?
还好,错误提示的比较明显,于是我就仔细看了,大概意思是使用预编译头时出错了。

这好办,打开项目-工程属性(或者直接按Alt+F7)选择“配置属性”- “c/c++ ”-预编译头-选择“不使用预编译头”。

重新生成解决方案,OK成功!
也可以根据,最后一条提示“ fatal error C1010: 在查找预编译头时遇到意外的文件结尾。

是否忘记了向源中添加“#include "stdafx.h"”?”在原文件开头添加#include "stdafx.h" 解决这个问题!
为什么需要预编译头文件?
一言以蔽之:提高编译速度.一般地,编译器以文件为单位编译。

如果修改了一工程中的一个文件则所有文件都要重新编译,包括头文件里的所有东西(eg.Macro 宏,Preprocessor预处理),而VC程序中,这些头文件中所包括的东西往往是非常大的,编译之将占很长的时间。

但它们又不常被修改,是较稳定的,为单独的一个小文件而重新编译整个工程的所有文件导致编译效率下降,因此引入了.PCH 文件。

如何使用预编译头文件以提高编译速度?
要使用预编译头文件,必须指定一个头文件(.H),它包含我们不会经常修改的代码和其他的头文件,然后用这个头文件来生成一个预编译头文件(.PCH),VC默认的头文件就是StdAfx.h,因为头文件是不能编译的,所以我们还需要一个.CPP 文件来作桥梁,VC默认的文件为StdAfx.cpp,这个文件里只有一句代码就是:#include "StdAfx.h"。

接下来要用它生成.PCH文件,涉及到几个重要的预编译指令:/Yu,/Yc,/Yx,/Fp。

简单地说,/Yc是用来生成.PCH文件的编译开关。

在Project->setting->C/C++的Category里的Precompiled Header,然后在左边的树形视图中选择用来编译生成.PCH文件的.CPP文件(默认即StdAfx.cpp),你就可以看到/Yc这个开关,它表示这个文件编译了以后是否生成.PCH文件(可能/Yc的c表示create)。

/Fp指令指定生成的.PCH文件的名字及路径(可能/Fp的p代表path)。

/Yu的u即use,工程中只要包括了.H文件的文件都会有这个/Yu 指令。

如果选择自动Automatic...的话则原来为/Yc的地方就换成了/Yx指令。

如果选择自动,则每次编译时编译器会看以前有没有生成过.PCH文件,有则不现生成否则就再次编译产生.PCH文件。

注意:
A,实际上,由Appzard项目向导生成的默认的头文件及CPP文件StdAfx.h和StdAfx.cpp可以是任何名字的.原因很简单。

但如果你要这样做就要记得修改相应的Project->setting...下的几个预编译指(/Yc,/Yu,/Yx,/Fp)的参数。

B.在任何一个包括了将要预编译的头文件而使用了.PCH文件的工程文件的开头,一定必须要是在最开头,你要包含那个指定生成.PCH文件的.H文件(通
过.CPP文件包括,默认为StdAfx.cpp),如果没包括将产生我最开头产生的错误.如果不是在最开头包括将产生让你意想不到的莫名其妙错误,如若不信,盍为试之?
C.预编译文件.PCH生成之很耗时间,而且生成之后它也很占磁盘空间,常在
5-6M,注意项目完成之后及时清理无用的.PCH文件以节约磁盘空间。

D.如果丢了或删了.PCH文件而以后要再修改工程文件时,可将指定的/Yc的.CPP 文件(默认为StdAfx.cpp)重新编译一次即可再次生成.PCH文件,不用傻傻的按F7或Rebuild All。

相关文档
最新文档