`
ybi043yb
  • 浏览: 13587 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

mark,[转]MS VC6 链接错误处理(debug静态链接)

 
阅读更多

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(**
分享到:
评论

相关推荐

    MarkMark v1.0.zip

    MarkMark是一款简单设计标注、测量工具。MarkMark有着自动测量区域像素、放大区域等功能。MarkMark也是一款很轻巧的、易操作的工具。需要对图像进行精细测量的朋友不试试这款软件。 MarkMark功能 MarkMark是一款...

    marktext的中文包

    marktext的中文包marktext的中文包

    图像旋转MARK校正

    图像处理中关于图像旋正(MARK校正)资料整理合集,包含分析和算法实现。

    HTML(HyperText Mark-up Language)即超文本标记语言

    HTML(HyperText Mark-up Language)即超文本标记语言或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字、图形、...

    MarkText.zip

    MarkText是一个MIT许可的开源项目,最新的版本可以从GitHub发布页面免费下载。MarkText还在发展中,它的发展离不开所有的赞助商。 特点: 实时预览(所见即所得)和一个干净和简单的界面。 支持CommonMark Spec, ...

    MarkMark.exe

    MarkMark.exe  MarkMark是一款非常实用的最新图片测量软件。这款图像测量系统同时也是一款简单设计标注、测量工具,它有自动测量区域像素、放大区域等功能,适用于需要对图像进行精确测量的用户使用!

    DebugView带GUI山寨 for Xp/2k3(x86/x64)/Vista

    Support : x86 -- Xp/2003/Vista x64 -- Xp/2003(sp1/sp2) 里面有猥琐过PatchGuard大法。。。[s:41] Capture and display: Win32 OutputDebugString ...怪不得Mark使用未文档函数来同步资源访问

    精通iOS6 (英文版) Dave Mark

    精通iOS6 (英文版) Dave Mark

    Dbgview-Mark Russinovich

    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 coremark 源代码,移植到需要测试的MCU平台即可。通过串口打印显示分数

    雷达信号处理基础高清版 Mark A.Richards著.part2

    雷达信号处理基础高清版 Mark A.Richards著,好不容易才找到

    Mark点匹配算法

    Mark点匹配算法,一个开卷设备,有一盘料带,一行有16个件,料带上有若干行,CCD去一行一行的检测,当检测到其中一行有一个或多个不良的工件时,会把不良工件的位置坐标给PLC(主要是给行坐标,也就是这一行上的第几...

    雷达信号处理基础高清版 Mark A.Richards著.part1

    雷达信号处理基础高清版 Mark A.Richards著,找了好久才找到

    Mark5C Software Development

    Mark5C Software Development

    基于机器学习与图像处理的目标Mark识别算法

    基于机器学习与图像处理的目标Mark识别算法,大家可以学习学习

    MARK点设计规范,MARK点设计规范

    MARK点设计规范,MARK点设计规范,MARK点设计规范

    mark地址修改工具

    mark地址修改

    marktext-Windows安装包marktext下载地址

    marktext-Windows安装包marktext下载地址

    riscv移植coremark

    参考网上资料移植的coremark到riscv芯片上,可以实现跑分,压缩包里有跑分结果

    MarkMark图片编辑.7z

    一个用于处理图片的小工具,主要用于图片处理和编辑,包括测量,颜色,文字等基本功能。 用于UI中一些简单的图片处理,用起来很方便。

Global site tag (gtag.js) - Google Analytics