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"我已经尝试并成功的选项,但我宁愿避免这种情况。

4

2 回答 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 重新编译了 lib,它链接得很好。

于 2011-03-21T10:12:26.933 回答
0

由于MSVPRTD.LIB 是 crt 的动态链接库的 importlib,当您明确要求静态链接到 crt时,您的构建链似乎有问题

您可能希望直观地检查项目文件是否存在矛盾。

于 2011-03-21T09:33:40.933 回答