Проверка ЭЛТ, используемой в библиотеке (.lib) - PullRequest
10 голосов
/ 21 марта 2011

Как проверить, с какой библиотекой времени исполнения связана статическая библиотека (.lib) в Windows?

Я компилирую свой проект с помощью / 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 голосов
/ 21 марта 2011

Я смог это исправить, выполнив следующие действия:

> 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, и она отлично связалась.

0 голосов
/ 21 марта 2011

Так как MSVPRTD.LIB является importlib динамической библиотеки ссылок crt, в то время как вы явно попросили ссылку на crt статически , что-то не так с вашей цепочкой сборки .

Возможно, вы захотите визуально проверить файл проекта на наличие противоречий.

...