mark,[转]MS VC6 链接错误处理(debug静态链接)
2011年03月31日
原帖地址:http://king-dxs.spaces.live.com/blog/cns!827cef33a5708083!178.entry
在Windows XP下编译的软件,放到Windows 2000上使用时,跳出了"无法找到动态链接库MSVCRTD.dll"的提示,后来还是直接将MSVCRTD.dll从WinXP系统目录下copy过来使用来解决问题的。
不过在解决问题过程中,有其他意外收获,现在记下来,说不定以后可参考一二。
刚开始时,我将MFC DLL改为静态库链接,编译,出现如下结果:
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _realloc already defined in libcmt.lib(realloc.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _free already defined in libcmt.lib(free.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _malloc already defined in libcmt.lib(malloc.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strchr already defined in libcmt.lib(strchr.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sprintf already defined in libcmt.lib(sprintf.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _tolower already defined in libcmt.lib(tolower.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _getenv already defined in libcmt.lib(getenv.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _toupper already defined in libcmt.lib(toupper.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __isctype already defined in libcmt.lib(isctype.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _atoi already defined in libcmt.lib(atox.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strstr already defined in libcmt.lib(strstr.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _calloc already defined in libcmt.lib(calloc.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strncpy already defined in libcmt.lib(strncpy.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strncmp already defined in libcmt.lib(strncmp.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _memmove already defined in libcmt.lib(memmove.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strtoul already defined in libcmt.lib(strtol.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _strtol already defined in libcmt.lib(strtol.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fclose already defined in libcmt.lib(fclose.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _ungetc already defined in libcmt.lib(ungetc.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __errno already defined in libcmt.lib(dosmap.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _sscanf already defined in libcmt.lib(sscanf.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _setlocale already defined in libcmt.lib(setlocal.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _printf already defined in libcmt.lib(printf.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _localtime already defined in libcmt.lib(localtim.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _time already defined in libcmt.lib(time.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _fflush already defined in libcmt.lib(fflush.obj)
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: __strdup already defined in libcmt.lib(strdup.obj)
LINK : warning LNK4098: defaultlib "MSVCRTD" conflicts with use of other libs; use /NODEFAULTLIB:library
..\..\Output\Release/FirewallMan.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
相信一个善良的人对上面的错误不会熟视无睹的,我的解决方法当然是对症下药:
Link->Category: Input->Ignore libraries:libcmt
clean后重新编译,还有下面的链接错误:
Linking...
nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argv
nafxcw.lib(appcore.obj) : error LNK2001: unresolved external symbol ___argc
nafxcw.lib(apphelp.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(filelist.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(dcprev.obj) : error LNK2001: unresolved external symbol __mbctype
nafxcw.lib(timecore.obj) : error LNK2001: unresolved external symbol __mbctype
..\..\Output\Release/FirewallMan.exe : fatal error LNK1120: 3 unresolved externals
Error executing link.exe.
呵呵,这个错误真厉害,我用google搜索了一下,发现才3页,而且提出问题后后面基本上没有什么解决方法,其中我还硬着头皮看了俄语的链接,但遗憾的是从字面上看没有解答,而后上了微软网站,看到有提问,但是没有回答的。
后来尝试了很多方法,经过摸索,最后得出解决方法:
在Preprocessor中定义_AFXDLL
如果它提示:fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds
就这样改:
C/C++->Code Generation->Multithread DLL (即实现/MD选项)
msvcrtd.lib(MSVCRTD.dll) : warning LNK4006: _sprintf already defined in libcmt.lib(sprintf.obj);
second definition ignored
下面翻译一段关于这个错误的文章,希望对你有所帮助
可以使用链接器的/VERBOSE:LIB 开关来确定链接器所搜索的的库(property->linker->command line->additional options编辑框中加入/VERBOSE:LIB ),可以告诉链接器忽略不正确的链接器,在property->linker->Input->Ignore Specific Libary里输入不正确的运行库或者使用/NODEFAULTLIB:library 开关。
下表显示根据你所用的运行库哪些是用忽略的
To use this run-time library Ignore these libraries
Single-threaded (libc.lib) libcmt.lib, msvcrt.lib, libcd.lib,
libcmtd.lib, msvcrtd.lib
Multithreaded (libcmt.lib) libc.lib, msvcrt.lib, libcd.lib,
libcmtd.lib, msvcrtd.lib
Multithreaded using DLL (msvcrt.lib) libc.lib, libcmt.lib, libcd.lib,
libcmtd.lib, msvcrtd.lib
Debug Single-threaded (libcd.lib) libc.lib, libcmt.lib, msvcrt.lib,
libcmtd.lib, msvcrtd.lib
Debug Multithreaded (libcmtd.lib) libc.lib, libcmt.lib, msvcrt.lib,
libcd.lib, msvcrtd.lib
Debug Multithreaded using DLL (msvcrtd.lib) libc.lib, libcmt.lib, msvcrt.lib,
libcd.lib, libcmtd.lib
例如如果你想创建一个使用non-debug, single-threaded版本的运行库,并收到了警告,可以使用下面的开关,(设置同/VERBOSE:LIB)
/NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib
下面的链接解决了LNK2005的问题
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;148652
Debug版本和Release版本有什么区别
原帖地址:http://topic.csdn.net/t/20041228/18/3683407.html
楼主 johncsdn(**
发表评论
-
REST on ASP.Net MVC (and Future)
2012-01-20 01:43 607REST on ASP.Net MVC (and Future ... -
Hibernate ehcache配置二级缓存[加入自己的意见]
2012-01-20 01:43 704Hibernate ehcache配置二级 ... -
充分利用 Xerces-C++,第 1 部分
2012-01-20 01:43 846充分利用 Xerces-C++,第 1 ... -
在 Linux x86 上安装 Oracle RAC 10g
2012-01-20 01:43 633在 Linux x86 上安装 Oracle RAC 10g ... -
Xen实践手册
2012-01-20 01:42 968Xen实践手册 2011年03月25日 一、Xen的安装 ... -
VB 打开网络连接
2012-01-19 09:31 598VB 打开网络连接 2011年10月29日 Option ... -
张志晨VB实例教程之打开word方法种种
2012-01-19 09:31 542张志晨VB实例教程之打开word方法种种 2011年08月3 ... -
暂时放一放./..脑子要炸了
2012-01-19 09:31 548暂时放一放./..脑子要炸了 2010年11月10日 f ... -
VB制作快捷打开电脑里的应用软件比如:我的电脑 网上邻居 等....
2012-01-19 09:31 685VB制作快捷打开电脑里的应用软件比如:我的电脑 网上邻居 等. ... -
vb代码2
2012-01-19 09:30 551vb代码2 2010年11月21日 ... -
注入进程
2012-01-17 02:06 688注入进程 2010年11月23日 ... -
汇编语言入门(六)
2012-01-17 02:06 716汇编语言入门(六) 2010年12月12日 4.2编写我 ... -
vs2008使用点滴
2012-01-17 02:05 1478vs2008使用点滴 2011年02 ... -
电脑集成
2012-01-17 02:05 616电脑集成 2011年06月12日 ... -
如何培养一年级学生良好的学习习惯
2012-01-15 21:34 416如何培养一年级学生良好的学习习惯 2011年06月28日 ... -
日记那点破事儿
2012-01-15 21:34 573日记那点破事儿 2011年0 ... -
成人笑话大全第019篇
2012-01-15 21:34 450成人笑话大全第019篇 20 ... -
二年级写作
2012-01-15 21:34 508二年级写作 2010年04月18 ...
相关推荐
MarkMark是一款简单设计标注、测量工具。MarkMark有着自动测量区域像素、放大区域等功能。MarkMark也是一款很轻巧的、易操作的工具。需要对图像进行精细测量的朋友不试试这款软件。 MarkMark功能 MarkMark是一款...
marktext的中文包marktext的中文包
图像处理中关于图像旋正(MARK校正)资料整理合集,包含分析和算法实现。
HTML(HyperText Mark-up Language)即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、...
MarkText是一个MIT许可的开源项目,最新的版本可以从GitHub发布页面免费下载。MarkText还在发展中,它的发展离不开所有的赞助商。 特点: 实时预览(所见即所得)和一个干净和简单的界面。 支持CommonMark Spec, ...
MarkMark.exe MarkMark是一款非常实用的最新图片测量软件。这款图像测量系统同时也是一款简单设计标注、测量工具,它有自动测量区域像素、放大区域等功能,适用于需要对图像进行精确测量的用户使用!
Support : x86 -- Xp/2003/Vista x64 -- Xp/2003(sp1/sp2) 里面有猥琐过PatchGuard大法。。。[s:41] Capture and display: Win32 OutputDebugString ...怪不得Mark使用未文档函数来同步资源访问
精通iOS6 (英文版) Dave Mark
Sysinternals DebugView Copyright © 1999-2004 Mark Russinovich Sysinternals DebugView is an application that lets you monitor debug output on your local system, or any computer on the network that ...
MCU coremark 源代码,移植到需要测试的MCU平台即可。通过串口打印显示分数
雷达信号处理基础高清版 Mark A.Richards著,好不容易才找到
Mark点匹配算法,一个开卷设备,有一盘料带,一行有16个件,料带上有若干行,CCD去一行一行的检测,当检测到其中一行有一个或多个不良的工件时,会把不良工件的位置坐标给PLC(主要是给行坐标,也就是这一行上的第几...
雷达信号处理基础高清版 Mark A.Richards著,找了好久才找到
Mark5C Software Development
基于机器学习与图像处理的目标Mark识别算法,大家可以学习学习
MARK点设计规范,MARK点设计规范,MARK点设计规范
mark地址修改
marktext-Windows安装包marktext下载地址
参考网上资料移植的coremark到riscv芯片上,可以实现跑分,压缩包里有跑分结果
一个用于处理图片的小工具,主要用于图片处理和编辑,包括测量,颜色,文字等基本功能。 用于UI中一些简单的图片处理,用起来很方便。