验证库文件(.lib)中使用的CRT

12

我如何检查一个Windows中的静态库(.lib)链接到了哪个运行时库?

我正在使用/MDd编译我的项目,我猜想我链接的某个库正在使用/MTd多线程调试。

Error   7   error LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ) already defined in libcpmtd.lib(xlock.obj)    C:\...\msvcprtd.lib(MSVCP100D.dll)

LIBCPMTD.LIB = 多线程,静态链接

我知道有一个选项/NODEFAULTLIB:"libcpmtd.lib",我已经尝试并成功使用了它,但我宁愿避免这样做。

2个回答

7
我通过以下方法解决了这个问题。
> dumpbin /DIRECTIVES C:\..\ThirdParty\tidy\windows\lib\libtidy
.lib
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file C:\..\ThirdParty\tidy\windows\lib\libtidy.lib

File Type: LIBRARY

   Linker Directives
   -----------------
   /DEFAULTLIB:"LIBCMT"
   /DEFAULTLIB:"OLDNAMES"
...

显然是链接到MT。我使用/MDd重新编译了该库,链接成功。


很酷,但如果我有“MSVCRT”用于/MD,我该如何找到使用的特定版本的Visual Studio?即哪个MSVCRTxx.dll被引用? - Mikhail

0

我正在尝试编译的项目使用/MDd,这是正确的设置。我正在尝试链接到某些东西,它使用/MT(d)静态或其他设置。Visual Studio 2010如何帮助检测我链接到的库中哪个与CRT冲突?是否没有手动检查所有项目文件的选项? - Mohamed Bana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接