开发者

Verifying CRT used in library (.lib)

开发者 https://www.devze.com 2023-02-18 06:28 出处:网络
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

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号