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)