VS下编译和发布的一些错误汇总

1.无法解析的外部符号 _wWinMain@16,该符号在函数 ___tmainCRTStartup 中被引用

报错原因,main函数跟工程类型不符,需要把工程设置成控制台程序

右键VS中工程名-->属性-->配置属性-->链接器-->系统-->子系统 改成“控制台(/SUBSYSTEM:CONSOLE)”


2.发布的程序在用户机器上弹出 MSVCP100D.dll 缺失 等类似信息

mfc、多线程等动态库没有找到,需要把这个库静态编译到发布的文件中去

右键VS中工程名-->属性-->配置属性-->项目默认值-->MFC的使用 改成 “在静态库中使用MFC”

右键VS中工程名-->属性-->配置属性-->C/C++-->代码生成-->运行库 改成 “多线程调试(/MTd)”或者"多线程(/MT)"


3.发布的程序在用户机器上弹出MSVCRD.dll缺失

在编译时把这个默认库去掉

右键VS中工程名-->属性-->配置属性-->链接器-->输入-->忽略特定默认库 加上 MSVCRTD.lib


3.1.发布的程序在用户机器上弹出MSVCRD.dll缺失

error   LNK2005:   _wcscpy   已经在   libcmtd.lib(wcscat.obj)   中定义
error   LNK2005:   _sprintf   已经在   libcmtd.lib(sprintf.obj)   中定义
error   LNK2005:   _sscanf   已经在   libcmtd.lib(sscanf.obj)   中定义

...

LNK2005这个错误是微软设计错误,因此如果遇到这个错误,我们只能躲过这个链接错误。具体的办法
就是将那个提示出错的库放到另外一个库的前面。另外选择不同的C函数库,可能会引起这个
错误。MS,   C有两种C函数库,一种是普通的函数库:LIBC.LIB,不支持多线程。另外一种是
支持多线程的:msvcrt.lib。如果一个工程里,这两种函数库混合使用,可能会引起这个错误。
因此建议使用支持多线程的msvcrt.lib。  

需要注意的是,当使用其他的库的时候最容易产生这种错误,例如boost和wxWindow使用/MD来
编译的,也就是使用支持多线程的C函数库。这时候如果自己的程序没有指明/MD的话,就会
提示两种C函数冲突,并且还有LNK2005错误。因此如果使用boost,wxWindow的话,需要指明/MD。


libcmtd.lib和msvcrtd.lib两个C函数库冲突的问题


4.无法解析的外部符号 _PdhCollectQueryData@...

这种一般都是没找到库,比如我的一个获取CPU、内存使用率的文件报上述错误,我在输入连接器-->输入-->附加依赖项里面加上pdb.lib就Ok了


5.TryEnterCriticalSection找不到定义

可以在文件头加上下面的宏定义

#ifndef _WIN32_WINNT

#define _WIN32_WINNT 0x500

#endif


但有时候不好用(加在预处理头文件里面应该没问题),可以在C/C++-->预处理器-->预处理器定义里面加入_WIN32_WINNT=0x500

 

6.Project : error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成后事件..."


7.内存泄露

Detected memory leaks!
Dumping objects ->
{6413} normal block at 0x01795030, 36 bytes long.
 Data: << u > 3C FB 75 00 09 00 00 00 09 00 00 00 01 00 00 00 
{657} normal block at 0x01794EA8, 56 bytes long.
 Data: << u > 3C FB 75 00 13 00 00 00 13 00 00 00 01 00 00 00 
{656} normal block at 0x017951F8, 66 bytes long.
 Data: << u > 3C FB 75 00 17 00 00 00 18 00 00 00 01 00 00 00

此文不错:http://blog.csdn.net/HeavenMonkey/article/details/2476411

_CrtSetBreakAlloc(xxx)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值