VC++ 2005编译链接错误汇总
--------------------------------------------------------------------------
1 文本字体需要使用Unicode,编译错误C2220和警告C4819
2 没有找到MSVCR80D.dll
3 默认库“MSVCRT”与其他库的使用冲突
4 warning C4996: 'getch' was declared deprecated
5 iostream.h 和 iostream
6 warning LNK4204: “…\Debug\vc80.pdb”缺少引用模块的调试信息
7 去掉字符串操作函数的警告信息"_CRT_SECURE_NO_DEPRECATE"
--------------------------------------------------------------------------
--------------------------------------------------------------------------
1 编译错误C2220和警告C4819
错误描述(在vs2005中,特别是查看别人的代码)
.crt_dbg1.c : error C2220: warning treated as error - no 'object' file generated
.crt_dbg1.c : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
错误描述(在vs2005中,特别是查看别人的代码)
.crt_dbg1.c : error C2220: warning treated as error - no 'object' file generated
.crt_dbg1.c : warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
只需要对次文件 Ctrl+A ,Ctrl+X, 然后再 Ctrl+V就搞定。(使文件变为unicode)
--------------------------------------------------------------------------
2 没有找到MSVCR80D.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题:
1)微软对于这个问题应该也有处理,不过感觉不是很人性化。在“属性->配置属性->清单工具->常规“下有一个”使用FAT32解决办法,把它选成是,就可以了。(注意:一定要先配置这个选项,然后再编译工程,要不然还是不好用:)
2)找到你的工程的文件夹,如(myproject),找到其下的myproject\myproject\Debug\ myproject.rec,把它删掉(删掉整个Debug目录也可以),重新编译,搞定!
3 默认库“MSVCRT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
打开此项目的“属性页”对话框;单击“链接器”文件夹;单击“输入”属性页;选择“忽略所有默认库”属性或在“忽略指定库”属性中指定要忽略的库列表。“命令行”属性页将显示对这些属性所做的更改的效果。
此问题在linker input 附加依赖项中添加: /nodefaultlib:msvcrt.lib
--------------------------------------------------------------------------
4 warning C4996: 'getch' was declared deprecated
使用_getch()代替原有的getch().
在使用VC 2005 的开发者会遇到这样的问题,在使用std命名空间库函数的时候,往往会出现类似于下面的警告: warning C4996: strcpy was declared deprecated 出现这样的警告,是因为VC2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。 对于这些问题,VC2005建议使用这些函数的更高级的安全版本,即在这些函数名后面加了一个_s的函数。这些安全版本函数使用起来更有效,也便于识别,如:strcpy_s,calloc_s等。 当然,如果执意使用老版本、非安全版本函数,可以使用_CRT_SECURE_NO_DEPRECATE标记来忽略这些警告问题。办法是在编译选项 C/C++ | Preprocessor | Preprocessor Definitions中,增加_CRT_SECURE_NO_DEPRECATE标记即可。
--------------------------------------------------------------------------
5 iostream.h 和 iostream两个是不同的东东。前者是传统库函数中的头文件,后者(没有.h)是标准库中的头文件。而标准库中的东西,都是定义在std名字空间里,是为了防止污染全局名字空间。
如果使用 iostream 头文件,就需要引用std,即加上using namespace std。
--------------------------------------------------------------------------
6 warning LNK4204: “…\Debug\vc80.pdb”缺少引用模块的调试信息;正在链接对象,如同没有调试信息一样
终于搞清楚了:如果生成的是 debug 模式的可执行文件但链接的却是 release 库,或者,如果生成的是 release 版本的可执行文件但链接的却是 debug 库,那么就出现上述问题。
--------------------------------------------------------------------------
7 去掉字符串操作函数的警告信息"_CRT_SECURE_NO_DEPRECATE"
解决办法:
右键该项目,属性-->配置属性-->c/c++-->预处理器-->预处理器定添加如下字段_CRT_SECURE_NO_DEPRECATE标记即可。
解决办法:
或者
Project -> Properties -> C/C++ -> Command Line加入/D "_CRT_SECURE_NO_DEPRECATE"