读书人

VS2008运行时库异常

发布时间: 2013-01-23 10:44:49 作者: rapoo

VS2008运行时库错误
我用了第三方的dll,然后直接写了个w32程序进行调试,设置为静态链接库,运行时库是/MD,改成/MTD或/MT都不行,只有/MD和/MDd才可以,这样设置可以成功运行。
然后我将代码转到MFC中使用,想通过对话框调用,这里就出问题了:
用了MFC后,设置为共享DLL,然后不管设成什么运行时库都没问题,如果我一改成静态链接,这个时候就有好多问题了,如果不加第三方的dll,单独一个MFC程序,只能设为/MT或/MTD,加了第三方dll,我竟然设成什么运行时库都报错。一个一个来,错误分别如下
1:设置成/MT的时候

1>LINK : 没有找到 E:\VC work space\new vc workspace\Ogre WorkSpace\Class2\Supermarket\MFCGame1\Debug\MFCGame1.exe 或上一个增量链接没有生成它;正在执行完全链接
1>MFCGame1Dlg.obj : error LNK2019: 无法解析的外部符号 __CrtSetBreakAlloc,该符号在函数 "public: __thiscall CMFCGame1Dlg::CMFCGame1Dlg(class CWnd *)" (??0CMFCGame1Dlg@@QAE@PAVCWnd@@@Z) 中被引用
1>nafxcwd.lib(afxmem.obj) : error LNK2001: 无法解析的外部符号 __CrtSetBreakAlloc
1>atlsd.lib(atltime.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
1>atlsd.lib(Allocate.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
1>atlsd.lib(AtlTraceModuleManager.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
1>atlsd.lib(AtlDebugAPI.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
1>atlsd.lib(atlbase.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
1>atlsd.lib(atlfuncs.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
......
这样的错误
2:设置成/MTD,错误和1中的一样
3:设置成/MD

1>正在编译...
1>stdafx.cpp
1>d:\vs2008instal\vc\atlmfc\include\afx.h(24) : fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
1>生成日志保存在“file://e:\VC work space\new vc workspace\Ogre WorkSpace\Class2\Supermarket\MFCGame1\MFCGame1\Debug\BuildLog.htm”
1>MFCGame1 - 1 个错误,0 个警告
编译器指明不能设成这样的
4:设置成/MDd
错误和3一样,各位帮我看看,啥子个情况,弄的晕了
[解决办法]
设置成MD
然后在工程设置里, Use of MFC 改成 Use MFC in a Shared DLL

MD,MT选项,程序跟引用DLL必须一致。第三方DLL肯定是MD编译的。
如果用MD编译,需要Use MFC in a Shared DLL


[解决办法]
你的程序最好是跟DLL的编译方式要一致
[解决办法]
我是过来学习一下的,谢谢各位。顺便查了一些资料:MT,MD,MTd,MDd,带T的都是使用的Sattic library,带D的使用的是share DLL;两个字母的是Release版本(MT和MD),三个字母的是Debug版本(MTd,MDd)。

读书人网 >VC/MFC

热点推荐