1、Fatal Error C1010: unexpected end of file while looking for precompiled header directive
:
编译时总出这个错误为什么?
: fatal error C1010: unexpected end of file while looking for precompiled
: header directive
: 我查了msdn好像不是他说的错误原因.
这是预编译头文件没有包括进来, 有两种解决办法。
(一) 是把所有的源程序文件前面都加上#include
(二)
如果你不原意改变源文件就在菜单上选择Project->Settings...
选择相应的配置(如果你是用Debug方式编译,就选Debug方式,如果Release方式就用Release),然后把下面的源文件树打开,选择没有
加上面那个include语句的文件,在右边把有关precompiled的项目取消或选成none precompiled之类的选项就成了.
2、Linker Tools Error LNK2001: unresolved external symbol "symbol"
学
习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已
通过。产生连接 错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非
常困难。 初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:
unresolved external symbol “symbol”(不确定的外部“符号”)。
如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。 以下是可能产生LNK2001错误的原因:
一.由于编码错误导致的LNK2001。
1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++ 源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将
发生该错误。
2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK 2001错误。
3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。
4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。
5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。 函数内声明的变量(局部变量) 只能在该函数的范围内使用。
C++ 的全局常量只有静态连接性能。这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。
二.由于编译和链接的设置而造成的LNK2001
1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块, 但除非在文件中明确包含这些库名,否则这些库不
会被链接进工程文件。在这种情况下使用/NOD将导致错误LNK2001。
2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将得到“unresolved external on _WinMain@16”的LNK2001错误信息。
3.使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引用。如果试图使用静态库LI
BC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编译,在使用MSVCxx.LIB连接时也会发生LNK2001。
4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001。
5.当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产生LNK2001;同样,使用调试版模态库连接发行版应用程序时也会产生相同的问题。
6.不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
7.在不同的模块使用内联和非内联的编译选项能够导致LNK2001。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联
(没有inline关键字),这时将得到该错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函数。
8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。
其实,产生LNK2001的原因还有很多,以上的原因只是一部分而已,对初学者来说这些就够理解一阵子了。但是,分析错误原因的目的是为了避免错误的发生。LNK2001错误
虽然比较困难,但是只要注意到了上述问题,还是能够避免和予以解决的。
unresolved external symbol
学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,
编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误
LNK2001非常困难。
初学者在学习VC++的过程中,遇到的LNK2001错误的错误消息主要为:
unresolved external symbol “symbol”(不确定的外部“符号”)。
如果连接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误消息。一般来说,发生错误的原因有两个:一是所引用的函数、变量不存在、拼写不正确或者使用错误;其次可能使用了不同版本的连接库。
以下是可能产生LNK2001错误的原因:
一.由于编码错误导致的LNK2001。
1.不相匹配的程序代码或模块定义(.DEF)文件能导致LNK2001。例如, 如果在C++ 源文件内声明了一变量“var1”,却试图在另一文件内以变量“VAR1”访问该变量,将发生该错误。
2.如果使用的内联函数是在.CPP文件内定义的,而不是在头文件内定义将导致LNK2001错误。
3.调用函数时如果所用的参数类型同函数声明时的类型不符将会产生LNK2001。
4.试图从基类的构造函数或析构函数中调用虚拟函数时将会导致LNK2001。
5.要注意函数和变量的可公用性,只有全局变量、函数是可公用的。 静态函数和静态变量具有相同的使用范围限制。当试图从文件外部访问任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001。
函数内声明的变量(局部变量) 只能在该函数的范围内使用。
C++ 的全局常量只有静态连接性能。这不同于C,如果试图在C++的多个文件内使用全局变量也会产生LNK2001错误。一种解决的方法是需要时在头文件中加入该常量的初始化代码,并在.CPP文件中包含该头文件;另一种方法是使用时给该变量赋以常数。
二.由于编译和链接的设置而造成的LNK2001
1.如果编译时使用的是/NOD(/NODEFAULTLIB)选项,程序所需要的运行库和MFC库在连接时由编译器写入目标文件模块, 但除非在文件中明确包含这些库名,否则这些库不会被链接进工程文件。在这种情况下使用/NOD将导致错误LNK2001。
2.如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时将得到“unresolved external on _WinMain@16”的LNK2001错误信息。
3.
使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func” 的引
用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行连接,将在__imp__func上发生LNK2001;如果不使用/MD选项编译,
在使用MSVCxx.LIB连接时也会发生LNK2001。
4.使用/ML选项编译时,如用LIBCMT.LIB链接会在_errno上发生LNK2001。
5.当编译调试版的应用程序时,如果采用发行版模态库进行连接也会产生LNK2001;同样,使用调试版模态库连接发行版应用程序时也会产生相同的问题。
6.不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
7.
在不同的模块使用内联和非内联的编译选项能够导致LNK2001。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文
件里却关闭了函数内联(没有inline关键字),这时将得到该错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函
数。
8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。
其实,产生LNK2001的原因还有很多,以上的原因只是一部分而已,对初学者来说这些就够理解一阵子了。但是,分析错误原因的目的是为了避免错误的发生。LNK2001错误虽然比较困难,但是只要注意到了上述问题,还是能够避免和予以解决的。。
另一人给的解释
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
>
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:windows改成/subsystem:console
3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
[Project] --> [Settings] --> 选择"Link"属性页,
在Category中选择Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 线程运行时库设置错误, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这是因为MFC要使用多线程时库, 需要更改设置:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
咸鱼游侠(75374355) 12:11:11
其中,
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版本: 调试阶段使用
分享到:
相关推荐
### 常见的VC编译错误解析 在VC++编程过程中,遇到各种编译错误是在所难免的,尤其对于初学者而言,了解并掌握如何处理这些错误是至关重要的。下面将详细介绍文中提及的一些常见编译错误及其解决方法。 #### 1. `...
本文将详细解析最常见的16种VC编译错误,并提供相应的解决策略。 1. **未定义标识符**:当编译器找不到声明的变量、函数或类时,会抛出此错误。这通常是由于拼写错误、忘记包含头文件或未声明变量导致的。解决方法...
下面,我们将针对给定文件中提到的几个常见VC编译错误进行详细解释,并提供相应的解决方法。 1. 错误:USE_NATIVE_EH has an invalid value, change it to 1 这个错误通常发生在使用Windows驱动开发工具包(WDK)时...
以下将详细介绍标题和描述中提到的两个常见错误及其解决办法。 首先,我们来看“Fatal Error C1010”。这个错误提示表示在编译器寻找预编译头文件指令时遇到了文件的意外结束。通常,当设置了参数/Yu"stdafx.h"时,...
vc2010成功编译stlPort5.2.1和boost1.53.0的方法及使用中的问题、解决办法的知识点涵盖: 1. STLPort5.2.1编译问题及解决方法: - STLPort5.2.1在Visual Studio 2010环境下编译时,可能会遇到编译错误C2084,提示...
"VC编译程序调试方法" 本文将详细介绍在微软IDE编程下VC的调试方法,并希望给初学者提供有益的指引。VC是众多C/C++编译器中调试...掌握VC编译程序调试方法可以帮助我们快速地发现和解决编程错误,提高编程能力和效率。
### VC6.0到VS2017编译报错解决办法 #### 一、概述 随着软件开发工具的不断进步,Visual Studio (VS) 的版本也在不断更新,从早期的 Visual C++ 6.0 (简称VC6.0) 发展到 VS2017,开发环境和编译器的功能得到了显著...
面对VC编译运行中的错误,关键在于细致地分析错误信息,结合代码上下文,定位并解决问题。从基础的语法错误到复杂的链接问题,每一种错误都有其特定的解决策略。通过不断实践和学习,开发者可以逐步提升调试技能,...
下面将详细讲解20种常见的VC++编译错误信息,以及如何解决这些问题。 1. **错误C2001:内联函数定义**:当在头文件中定义了内联函数,而没有在源文件中定义时,会出现此错误。解决方案是确保内联函数只在头文件中...
在整个过程中,可能会遇到一些常见问题,如编译错误、依赖库缺失等,需要根据错误信息进行相应的解决。此外,对于 OpenSSL 这样的开源项目,了解其源代码结构和编译规则也是十分必要的。 总结,通过在 VS2008 中...
总的来说,解决VC6.0的链接错误需要仔细检查项目的配置、源代码以及使用的库。理解错误信息,定位未解析的外部符号,然后针对性地调整项目设置或修复代码,通常是解决问题的关键。在编程过程中,遇到问题时保持耐心...
描述中提到的具体错误是"BCB contains invalid OMF record, type 0x21 (possibly COFF)",这个错误通常意味着BCB在处理VC编译的DLL时,遇到了不兼容的对象模块格式(OMF)记录,这种记录类型0x21可能是微软的通用对象...
Depends2.2_x86是一款专为VC程序设计的反编译工具,它能帮助开发者分析和调试程序对各种动态链接库(DLL)的依赖性,从而解决运行时错误和兼容性问题。下面我们将详细探讨Depends2.2_x86的功能、使用方法以及其在...
在实际应用中,我们还需要关注错误处理,libssh提供了丰富的错误码和错误信息,帮助开发者定位和解决可能出现的问题。同时,为了确保安全性,应当遵循最佳实践,比如定期更新libssh库,避免使用已知漏洞的版本。 ...
2、错误有中文翻译及中文解决办法指引; 3、包含基本VC6.0的快捷键操作及基本常用操作详细介绍; 4、初学C语言的同学必备的一个文档,快速上手VC6.0及C语言 5、适合使用VC6.0开发学习的编程同学等
在使用VC6.0编写C/C++程序时,可能会遇到各种编译错误,这些错误通常涉及语法错误、标识符声明、赋值操作、未定义的符号等问题。下面是对这些常见错误及其解决方案的详细解释: 1. **Initialization**(初始化):...
在IT领域,特别是软件开发中,遇到编译错误是家常便饭,尤其在使用较为老旧的集成开发环境(IDE)如Visual C++ 6.0时,由于其对现代编程标准的支持有限,开发者可能会遇到一系列特有的错误指令。本文将详细解析VC6.0...
以下是一些常见的错误及相应的解决方法: 1. **错误C2440:static_cast转换失败** 当编译器无法执行指定类型的转换时,会抛出C2440错误。通常,这可能是因为尝试将不兼容的数据类型进行强制转换。解决方案是检查...
### VC6编译驱动的方法(含32和64位) #### 一、概述 本文主要介绍了如何使用Visual C++ 6.0 (VC6) 编译Windows驱动程序,覆盖了32位和64位环境下的编译流程。在进行Windows驱动开发时,虽然微软官方推荐使用更...