编译代码前配置项,
1、宏定义 -D
2、头文件路径 -I
3、包含库:-lthread
4、库路径 -L
C编译器编译C++需要添加-lstdc++,并使用_cplusplus,extern "C"{}
说说windows吧。
出现:
1、error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
问题:MT库不匹配MD库,调用的时候用的MT,库文件用MD生成的。用下面方法修改一致就可以了。
在工程上右键-》属性-》c/c++-》代码生成-》运行库,因为所选的工程运行库选择错误导致的。
其中四个选项的对应含义如下:
多线程调试Dll (/MDd) 对应的是MD_DynamicDebug
多线程Dll (/MD) 对应的是MD_DynamicRelease
多线程(/MT) 对应的是MD_StaticRelease
多线程(/MTd)对应的是MD_StaticDebug
2、uafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) 已经在 LIBCMT.lib(delete.obj) 中定义
原因:
CRT 库对 new、delete 和 DllMain 函数使用弱外部链接。MFC 库也包含 new、delete 和 DllMain 函数。这些函数要求先链接 MFC 库,然后再链接 CRT 库。当 C 运行时 (CRT) 库和 Microsoft 基础类 (MFC) 库的链接顺序有误时,可能会出现以下 LNK2005 错误。
解决方法:强制链接器按照正确的顺序链接库!
project->properties->Linker->Ignore Specific Library 添加 uafxcwd.lib Libcmtd.lib
在Additional Dependencied添加uafxcwd.lib Libcmtd.lib
或者将其负略掉。/FORCE:MULTIPLE
3、Debug可以进入的函数,Release进不去的解决办法
release版本将优化代码,while(j){}将停住,需加volatile。
问题描述:
4、内存泄露检测
#define CRTDBG_MAP_ALLOC
#include "stdafx.h"
#include <stdlib.h>
#include <crtdbg.h>
inline void EnableMemLeakCheck()
{
_CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
}
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)//使用这些定义,用新的new代替老的new,打印文件行
//#define malloc(s) _malloc_dbg(s, _NORMAL_BLOCK, __FILE__, __LINE__)
//#define calloc(c, s) _calloc_dbg(c, s, _NORMAL_BLOCK, __FILE__, __LINE__)
//#define realloc(p, s) _realloc_dbg(p, s, _NORMAL_BLOCK, __FILE__, __LINE__)
#endif
void fafal()
{
char* pChars = new char[1];
char* pChars1 = (char *)malloc(1);
//delete[] pChars;
//free(pChars1);
}
int _tmain(int argc, _TCHAR* argv[])
{
fafal();
_CrtDumpMemoryLeaks();//检测本句以前的代码
return 0;
}
5、获取当前时间
time_t t;
time(&t);
struct tm *stm = localtime(&t);
if (stm)
strftime(buf, 18, "%Y%m%d.%H:%M:%S", localtime(&t));
else
buf[0] = 0;
return buf;