【问题标题】:Verifying CRT used in library (.lib)验证库 (.lib) 中使用的 CRT
【发布时间】:2011-03-21 09:24:05
【问题描述】:

如何检查 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" 我已经尝试并成功了,但我宁愿避免这种情况。

【问题讨论】:

    标签: c++ windows crt


    【解决方案1】:

    我能够通过以下方式解决此问题

    > 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,并且链接正常。

    【讨论】:

    • 这很酷,但如果我有 /MD 的“MSVCRT”,我如何找到使用的特定版本的 Visual Studio? IE。引用了哪个 MSVCRTxx.dll?
    【解决方案2】:

    由于 crt 的 MSVPRTD.LIB is the importlib of the dynamic link library,当您明确要求链接到 crt静态时,您的构建链似乎有问题。

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

    【讨论】:

    • 我正在尝试编译的项目正在使用 /MDd,这是正确的设置。我试图链接到的东西是使用 /MT(d) static 或其他什么。 Visual Studio 2010 如何帮助检测我链接到的哪个库有冲突的 CRT?是否没有手动检查所有项目文件的选项?
    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多