V​S​2​0​0​5​编​译​链​接​错​误​小​结

1.run error: 没有找到MSVCR80D.dll,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题?

解决办法:

方法一、微软对于这个问题应该也有处理,不过感觉不是很人性化。在“属性->配置属性->清单工具->常规“下有一个”使用FAT32解决办法,把它选成是,就可以了。注意:一定要先配置这个选项,然后再编译工程,要不然还是不好用

方法二、找到你的工程的文件夹,如(myproject),找到其下的myproject\myproject\Debug\ myproject.rec,把它删掉(删掉整个Debug目录也可以),重新编译就可以了。

 

2. iostream.h 和 iostream

iostream.h 和 iostream两个是不同的东西。前者是传统库函数中的头文件,后者(没有.h)是标准库中的头文件。而标准库中的东西,都是定义在std名字空间里,是为了防止污染全局名字空间。如果使用 iostream 头文件,就需要引用std,即加上using namespace std。

 

3. warning LNK4204: “…\Debug\vc80.pdb”缺少引用模块的调试信息;正在链接对象,如同没有调试信息一样

如果生成的是 debug 模式的可执行文件但链接的却是 release 库,或者如果生成的是 release 版本的可执行文件但链接的却是 debug 库,那么就出现上述问题。

 

4. warning:去掉字符串操作函数"_CRT_SECURE_NO_DEPRECATE"
解决办法:

方法一、右键该项目,在Project -> Properties  ->C/C++->预处理器->预处理器定义中添加_CRT_SECURE_NO_DEPRECATE标记即可。

方法二、Project -> Properties  -> C/C++ -> Command Line加入/D "_CRT_SECURE_NO_DEPRECATE"

 分析:

出现这样的警告,是因为VC2005中认为CRT中的一组函数如果使用不当,可能会产生诸如内存泄露、缓冲区溢出、非法访问等安全问题。这些函数如:strcpy、strcat等。对于这些问题,可以按照上述方法使用_CRT_SECURE_NO_DEPRECATE标记来忽略这些警告问题。

 

5. error LNK2019: unresolved external symbol __security_cookie referenced in function ...

解决办法:

编译时出现了这个错误, Properties ---> C/C++ ---> Code Generation ---> Buffer Security Check,设置为 NO(/GS-)

 

6.error Link:具有相同时间戳的名为.pch的PCH已存在于.obj中,使用第一个PCH…

解决办法:

将属性->C/C++->预编译头项,改为使用预编译头。

 

7. error Link:默认库“MSVCRT”与其他库的使用冲突

解决办法:

打开此项目的“属性页”对话框;单击“链接器”文件夹;单击“输入”属性页;选择“忽略所有默认库”属性或在“忽略指定库”属性中指定要忽略的库列表。“命令行”属性页将显示对这些属性所做的更改的效果。在linker input 附加依赖项中添加: /nodefaultlib:msvcrt.lib即可解决该问题。

 

8. fatal error C1083: Cannot open precompiled header file: 

'Debug/<Project-Name>.pch': No such file or directory

分析:
因为该模块没有包括预编译头文件“stdafx.h”的缘故。

VC用一个stdafx.cpp包含头文件stdafx.h,然后在stdafx.h里包含大部分系统头文件,这样编译时VC就通过编译stdafx.cpp把大部分系统头文件预编译进来了,在Debug目录下有一个很大的文件*.pch,这里就存储了预编译信息。根据这个原理,如果这个pch损坏了或被删除了,系统重新编译时就会抱怨“cannot open precompiled header file debug/*.pch”。

解决办法:

打开Project->Setting对话框选C++页,将Category下拉式列表框选中Precompiled Headers,最简单的办法就是选中第一个选项“Not using....",这样就根本不用预编译头也不去寻找pch文件,就不会出错了,但是这样做的后果是每次编译、链接都花更多的时间。也可以选第二个选项”Automatic ...",然后在“Through header”力填上stdafx.h,这样如果没有pch文件系统会自动生成一个pch,如果有的话就使用这个pch,这个选项是比较“智能”的。第三个选项是强行创建一个pch文件,第四个选项是直接使用pch文件。当然“Through headers”里都填stdafx.h了。

9. 链接时出错提示:
LIBCMT.lib(crt0dat.obj) : error LNK2005: __amsg_exit already defined in MSVCRTD.lib(MSVCR80D.dll)
解决办法:

Project Properties->Linker->Input中, 右边有个Ignore Specific Library,输入"MSVCRTD.lib",确定即可。

 

10. 关于VS2005编译的程序运行时提示“由于应用程序配置不正确,应用程序未能启动”的问题

解决办法:

方法一、修改项目属性,静态链接mfc库,此时在属性->配置属性->C/C++->代码生成里的运行时库项会自动变成多线程。

方法二、在Microsoft Visual Studio 8\VC\redist\x86下,根据Manifest文件中的version属性,将相应的Microsoft.VC80.CRT.manifest和Microsoft.VC80.MFC.manifest文件拷贝到应用程序目录下。若使用了atl库,还需要拷贝Microsoft.VC80.ATL.manifest文件。

 

11.编译错误

mt.exe : general error c101008d: Failed to write the updated manifest to the resource of file ".\Release\xxx.exe". 

解决办法:

在项目属性——配置属性——链接器——清单文件中, 把生成清单改成否就行了。或者在项目属性——配置属性——清单工具——输入和输出中,把嵌入清单改成否也行。 

分析:

由于VC需要把生成的文件中嵌入MANIFEST文件,而由于杀毒软件之类的会握有这个文件句柄(因为杀毒软件发现这个EXE,DLL正在读写),于是VC就写不进去了,方法是暂时关闭杀毒软件,这样就不用改写MANIFECT。

 

12. rutil.lib(Socket.obj) : error LNK2019: 无法解析的外部符号__imp__WSACleanup@0,该符号在函数"void __cdecl resip::initNetwork(void)" (?initNetwork@resip@@YAXXZ) 中被引用

分析:

工程使用的rutil.lib 调用了WSACleanup函数,但是工程并没有加进该函数的库。

解决办法:

项目 --> 属性 --> 链接器 -->  输入 --> 附近依赖项填入使用到的库;或者在stdafx.h加入“#pragma comment(lib,"ws2_32.lib")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值