VS2008运行时库错误

Ginie 2013-01-09 09:33:30
我用了第三方的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一样,各位帮我看看,啥子个情况,弄的晕了
...全文
240 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liquanhai 2013-01-09
  • 打赏
  • 举报
回复
我是过来学习一下的,谢谢各位。顺便查了一些资料:MT,MD,MTd,MDd,带T的都是使用的Sattic library,带D的使用的是share DLL;两个字母的是Release版本(MT和MD),三个字母的是Debug版本(MTd,MDd)。
枫桦沐阳 2013-01-09
  • 打赏
  • 举报
回复
win32能便宜通过而MFC不通过 说明冲突是因为MFC DLL而不是运行时库,根本原因是你的编译环境比第三方DLL的编译环境不一样。
Ginie 2013-01-09
  • 打赏
  • 举报
回复
实在不想打包编译发布,太大了
Ginie 2013-01-09
  • 打赏
  • 举报
回复
引用 3 楼 VisualEleven 的回复:
你的程序最好是跟DLL的编译方式要一致
现在是改不了第三方dll的编译方式,所以只有我和它统一,奇怪就奇怪用w32控制台都可以设成静态的编译成功,怎么一到MFC上就不行,而且在MFC上设成共享DLL方式编译就没问题,一改成静态就出错,纳闷了
Ginie 2013-01-09
  • 打赏
  • 举报
回复
但是我想弄成静态编译的,怎么办,一改就报错,且郁闷的是我直接用w32控制台程序设成静态的就成功,一改MFC就出问题呀
Eleven 2013-01-09
  • 打赏
  • 举报
回复
你的程序最好是跟DLL的编译方式要一致
枫桦沐阳 2013-01-09
  • 打赏
  • 举报
回复
忘了一点,也可以设置成MDd,是MD的DEBUG版本
枫桦沐阳 2013-01-09
  • 打赏
  • 举报
回复
设置成MD 然后在工程设置里, Use of MFC 改成 Use MFC in a Shared DLL MD,MT选项,程序跟引用DLL必须一致。第三方DLL肯定是MD编译的。 如果用MD编译,需要Use MFC in a Shared DLL
Ginie 2013-01-09
  • 打赏
  • 举报
回复
问题我知道了,因为第三方的库链接方式改不了,只能通过动态链接了,主要还是自己写的dll和引进的第三方在对静态编译时不能一起编译到exe中,算了,动态就动态吧,谢谢各位了

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧