Verifying CRT used in library (.lib)
How do I check what runtime library a static library (.lib) in Windows has linked to?
I'm compiling my project with /MDd and I presume a library I'm linking to is using /MTd Multi-threaded Debug
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 = Mult开发者_JS百科ithreaded, static link
I know there's an option /NODEFAULTLIB:"libcpmtd.lib"
which I've tried and succeeded with, but I'd rather avoid that.
I was able to fix this doing the following
> 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"
...
It's cleary linking to MT. I recompiled the lib using /MDd and it linked fine.
Since MSVPRTD.LIB is the importlib of the dynamic link library of the crt, while you explicitely asked to link to the crt statically, something seems wrong with your build chain.
You may want to check the project file visually for contradictions.
精彩评论