安装、使用vc遇到的问题及解决.pdf
感言:真是久病成良医啊!1.C 语言中出现 Compiling. Error spawning cl.exe 是什么意思?怎么解决?很多人在安装 VC 6.0 后有过点击“Compile 或者“Build 后被出现的Compiling. ,Error spawning cl.exe 错误提示给郁闷过。很多人的选择是重装,实际上这个问题很多情况下是由于路径设置的问题引起的,CL.exe 是 VC 使用真正的编译器(编译程序),其路径在“ VC 根目录你可以到相应的路径下找到这个应用程序。因此问题可以按照以下方法解决:打开择)” “ Directories(目录)重新设置 “ Excutable Fils Include Files、Library Files、Source Files 的路径。很多情况可能就一个盘符的不同(例如你的 VC 装在 C,但是这些路径全部在如果你是按照初始路径安装executatble files:C:Program FilesMicrosoft Visual StudioCommo nMSDev98Bi nC:Program FilesMicrosoft Visual StudioVC98BINC:Program FilesMicrosoft Visual StudioCommo nTOOLSC:Program FilesMicrosoft Visual StudioCommo nTOOLSWINNTin clude files:C:Program FilesMicrosoft Visual StudioVC98INCLUDEC:Program FilesMicrosoft Visual StudioVC98MFCINCLUDEC:Program FilesMicrosoft Visual StudioVC98ATLINCLUDElibrary files:C:Program FilesMicrosoft Visual StudioVC98LIBC:Program FilesMicrosoft Visual StudioVC98MFCLIBsource files:C:Program FilesMicrosoft Visual StudioVC98MFCSRCC:Program FilesMicrosoft Visual StudioVC98MFCINCLUDEC:Program FilesMicrosoft Visual StudioVC98ATLINCLUDEC:Program FilesMicrosoft Visual StudioVC98CRTSRC如果你装在其他盘里,则仿照其路径变通就行。关键是 microsoft visual studio后面的东西要相同。2.关于 VC 中 error C2871: std : does not exist or is not a namespaceD),改过来就 OK 了。VC6.0 的,路径应为:vc 界面点击 VC “ TOOLS (工具)”一 “Option选Bin ”下面,今天写了个程序用了如下代码#in clude using n amespace std;查了一下,原来 C+有两个不同版本的头文件。引入名字空间这个概念以前编译器用的是#inelude ,std 名字空间的头文件名字变成了。而引入名字空间的概念以后是比较老的 C+的头文件的版本,而 namespace 是 98 年才被加入 C+标准的, 所以里面是没有 std 这么个命名空间的,当使用 时,相当于在 c 中调用库函数,使用的是全局命名空间, 也就是早期的 C+实现。头文件则没有 定义全局命名空间,使用时必须使用namespace std 才能正确使用 cout。vc6.0 支持这个两个版本.不过现在都用 了所以只需将以上语句改为:#in clude using n amespace std;或者是 #in clude 即可3.有时候 vc+告诉你找不到 msvcrdb60.dll?dll 扩展名归类为扩展名解释:Windows 动态链接库文件.没有找到1.动态链接库(Dynamic Link Library) 如果您的系统提示msvcr71.dll 或者 缺少 msvcr71.dll 等类似错误信息,请把方法:如果您的系统提示msvcr71.dll 下载到本机没有找到 msvcr71.dll 或者 缺少 msvcr71.dll 等类似错误信息,请把 msvcr71.dll 下载到本机二、直接拷贝该文件到系统目录里1、 Windows 95/98/Me 系统,则复制到C:WindowsSystem目录下。2、 Windows NT/20003.3.系统,则复制到C:WINNTSystem32 目录下。Windows XP 系统,则复制到C:WindowsSystem32 目录下。然后打开 开始-运行-输入 regsvr32 msvcr71.dll ”,回车即可解决错误提示!4.4.为什么我 VC+6.0 提示 Cannot open include file: streambuf:Nosuch file or directory在.Microsoft Visual StudioVC98lnclude 目录下找找看有没有 streambuf 这个文件.因为你的编译器版本老iostream.h 是先出来的,iostream 是后面才出来的,基本上涵盖了 .h 的所有东西,你的编 译器版本太老,还没加载不过解决的方法是有的一. 编译器中的库文件版本过于旧了。换个 VS2005 或者是 VS2008 吧。二. 这说明你的 VC 中没有这三个文件 exception stdexcept streambuf下载一个 streambuf, 一般下载中都给你配好了这三个文件请注意:后缀没有.h将这三个文件放到 include 文件夹下,就 ok 了 .5.5.vc6.0 为什么在代码输入区中显示不出中文?iostream 这个库这个是你的设置问题,不是那个dll 文件的问题。请你按下面的步骤(我用的是英文版的,:打开 VC+6。0 选择在菜单栏中Tool(工具)中的若你用中文版的,请你自行翻译成中文)Option.(选项).然后选择 Format(格式)标签(就是最后一标签)在CateGorv(类别)栏选择 SourceWindows(原窗口)在 Font(字体)栏选择 Fixedsys 字体大小你自决定,本人认为 12 看起来最舒服(默认好像也是 12)这样应该就没问题的。以前我也遇到过像你一样的问题,重装了几次都没用。后来才发现是字体的设置问题。因为设置了不支持中文的字体了。在那里可以设置VC+的窗口的字体,不过大多都用Fixedsyg 吧,除了那个Source Browser (源浏览器)和Workspace Window(工作区窗口)用 system 字体。6.6.msdev98 和 vc98 有什么区别msdev98 是 VC98 , VB98 等语言的集成开发环境的缩写,使用编辑,连接,执行程序。7.7.建立工程中遇到的问题LIBCD.Iib(wi ncrt0.obj) : error LNK2001: un resolved external symbol _Wi nM ai n16错误VC98,就要使用 msdev 来学习 VC+时经常会遇到链接错误产生连接错误的原因非常多,尤其另一个由于编LNK2001,而一般说来发生连接错误时,编译都已通过。LNK2001 错误,常常使人不明其所以然。产生LNK2001,在这不想详细说LNK2001 错误的原因:一个是由于编码错误导致的译和链接的设置而造成的error LNK2001:LNK2001.最经常发生的是:LIBCDib(wincrtO.obj):un resolved external symbol,产生这个 错误的 原因是没有为Win32wWinMainCRTStartup 设定程序入口 .认识这个错误首先在新建工程时要分清Application 和 Win32 Console Application.它们都是工作在 32 位 Windows 环境的程序.其中 Win32Applicati on 就是普通的常见的窗口应用程序,当然有的界面做得比较个性化,比如圆形的、不规则形状的.它们都是所谓的 GUI(Graphics User In terface图形用户接 口),我们可以通过鼠标点击来完成控制。而(win32 控制台应用程序)往往是像得用键盘输入各种命令来使用它口)。遇到如下链接错误:Linkin g. /subsystems in dowsLIBCD.lib(wi ncrtO.obj) : error LNK2001: un resolved external symbol _Wi nM ai n16Debug/TestWi n.exe : fatal error LNK1120: 1 un resolved externalsError execut ing lin k.exe.解决方法是:将 project-sett in gs-l ink的 project opti ons里的 /subsystem:w in dows改成 /subsystem:con sole因为 Win32 Application 的入口函数为 WinMainWin32 Con sole Applicatio n 的入口函数是 ma in也就是说,如果你编写传统的C 程序,必须建立 Win32 Console 程序,但 VC 里面默认的是Win32 Application,于是上面提及的链接错误就就经常出现了而 Win32 Application 和 Win32 Console 的区别就在于 VC 里链接参数不同另外几种 error LNK2001 错误:在创建 MFC 项目时,不使用 MFC AppWizard 向导,如果没有设置好项目参数产生很多连接错误,如 error LNK2001 错误,典型的错误提示有:libcmtd.lib(crt0.obj) : error LNK2001: un resolved exter nal symbol _mai nLIBCD.lib(wi ncrtO.obj) : error LNK2001: un resolved external symbol _Wi nM ai n16msvcrtd.lib(crtexew.obj) : error LNK2001: un resolved external symbol _Wi nMai n16 nafxcwd.lib(thrdcore.obj) : error LNK2001: un resolved exter nal symbol _beg in threadex nafxcwd.lib(thrdcore.obj) : error LNK2001: un resolved exter nal symbol _en dthreadex下面介绍解决的方法:1. Windows 子系统设置错误,提示:libcmtd.lib(crt0.obj) : error LNK2001: un resolved exter nal symbol _mai nWin 32 Con sole Applicati onMS-DOS 窗口( XP 中叫命令提示符)的样子出现,我们,或者叫 CUI(Character User In terface 字符用户接,就会在编译时Windows 项目要使用 Windows 子系统,而不是 Console,可以这样设置: Project - Settings- 选择Link属性页,在 Project Opti ons 中将 /subsystem:c on sole 改成 /subsystem:w in dows2. Con sole 子系统设置错误,提示:(release 版本)(release 版本)LIBCD.Iib(wi ncrtO.obj) : error LNK2001: un resolved external symbol _Wi nM ai n16控制台项目要使用 Console 子系统,而不是 Windows,设置:Project - Settings- 选择Link属性页,在 Project Opti ons 中将 /subsystems in dows 改成 /subsystem:。on sole3. 程序入口设置错误,提示:msvcrtd.lib(crtexew.obj) : error LNK2001: un resolved external symbol _Wi nMai n16通常,MFC 项目的程序入口函数是WinMain,如果编译项目的 Unicode 版本,程序入口必须改为 wWinMainCRTStartup,所以需要重新设置程序入口:Project - Settings- 选择C/C+属性页,在 Category 中选择 Output,再在 Entry-point symbol 中填入 wWinMainCRTStartup,即可4. 线程运行时库设置错误,提示:n afxcwd.lib(thrdcore.obj) : error LNK2001: un resolved exter nal symbol _beg in threadexn afxcwd.lib(thrdcore.obj) : error LNK2001: un resolved exter nal symbol _en dthreadex这是因为 MFC 要使用多线程时库,需要更改设置:Project - Settings- 选择C/C+属性页,在 Category 中选择 Code Generation,再在 Use run-time library 中选择Debug Multithreaded 或者multithreaded单线程静态链接库其中,多线程静态链接库Sin gle-Threaded多线程动态链接库Multithreaded multithreaded DLL单线程静态链接库Debug Sin gle-Threaded Debug多线程静态链接库Multithreaded Debug Multithreaded多线程动态链接库DLL单线程:不需要多线程调用时,多用在 DOS 环境下多线程:可以并发运行静态库:直接将库与程序 Link,可以脱离 MFC 库运行 动态库:需要相应的 DLL 动态库,程序才能运行release 版本:正式发布时使用 debug 版本:调试阶段使用