链接使用Qt的vc项目时出现LNK2005的错误的解决办法(一把辛酸泪啊,整了10个小时)

链接使用Qt的vc项目时出现LNK2005的错误的解决办法(一把辛酸泪啊,整了10个小时)
在Debug模式下,Qt用的运行时库为 多线程调试DLL(/MDd)

VC提供的一个小工具便可以查看库中目标模块指定的默认库,这就是dumpbin.exe。运行下面这个命令

dumpbin /DIRECTIVES my.lib


输出如下:


D:\Qt\4.3.0\lib>dumpbin /DIRECTIVES qtmaind.lib
Microsoft (R) COFF/PE Dumper Version 7.10.6030
Copyright (C) Microsoft Corporation.  All rights reserved.

 


Dump of file qtmaind.lib

File Type: LIBRARY

   Linker Directives
   -----------------
   /DEFAULTLIB:"uuid.lib"
   /DEFAULTLIB:"uuid.lib"
   /DEFAULTLIB:"msvcprtd"
   /DEFAULTLIB:"MSVCRTD"
   /DEFAULTLIB:"OLDNAMES"

  Summary

           8 .bss
          2F .data
        8833 .debug$S
          7C .debug$T
          72 .drectve
          B5 .rdata
          60 .sxdata
        22BC .text
         2D2 .text$x
         54C .xdata$x


上面蓝色的说明就是 多线程调试DLL(/MDd)

  然后在输出中找那些"Linker Directives"引导的信息,你一定会发现每一处这样的信息都会包含若干个类似"-defaultlib:XXXX"这样的字符串,其中XXXX便代表目标模块指定的缺省库名。

 

  知道了第三方库指定的默认标准库,再用合适的选项编译我们的应用程序,就可以避免LNK2005和LNK1169链接错误。喜欢IDE的朋友,你一样可以到 "Project属性" -> "C/C++" -> "代码生成(code generation)" -> "运行时库(run-time library)" 项下设置应用程序的默认标准库版本


          只要project用了qt的库,Debug下就得设置成 多线程调试DLL(/MDd),这个project链接的其他库也需要统一成这个

你可能感兴趣的:(链接使用Qt的vc项目时出现LNK2005的错误的解决办法(一把辛酸泪啊,整了10个小时))