для чего libcpmtd.lib? - PullRequest
       11

для чего libcpmtd.lib?

0 голосов
/ 05 февраля 2020

Внезапно моя программа получила ошибки ссылки, как показано ниже:

libcpmtd.lib (xlock.obj): ошибка LNK2038: «RuntimeLibrary» не соответствует. Значение «MTd_StaticDebug» отличается от значения [ проект x], а именно: 'MDd_DynamicDebug'

Поскольку эта ошибка внезапно появилась на нескольких компьютерах, я считаю, что это не было вызвано непреднамеренным изменением какого-либо файла.

Версия: Visual Studio 2013

Вопрос-1:

Не могли бы вы дать намек о причине этой ошибки и о том, как ее устранить?


Что я сделал: Я удалил libcpmtd. lib из списка импорта настроек проекта, затем ошибка сборки исчезла, и все было в порядке.

Но я не уверен, для чего предназначен libcpmtd.lib? Google сказал мне, что внутри есть ЭЛТ, но какой конкретно контент?

Возможно, эта библиотека была добавлена, а потом уже неактуальна.

Вопрос-2:

что находится в стороне libcpmtd.lib? Я хочу выяснить, что я мог потерять после удаления библиотеки.

1 Ответ

0 голосов
/ 05 февраля 2020

Это стандартные библиотеки времени исполнения C ++. В Visual C ++ у вас есть 2 варианта, которые дают вам 4 варианта библиотеки, на которую она ссылается.

Отладка против выпуска

Как и следует, вы хотите, чтобы библиотека времени выполнения C ++ имела дополнительную проверку ошибок?

Stati c против Dynami c

Если вам случается компилировать только простой exe-файл, тогда статическая ссылка на библиотеку должна быть в порядке. Однако если у вас большой проект, состоящий из нескольких библиотек DLL, то имеет смысл динамически загружать CRT (чтобы он мог быть распределен между библиотеками DLL, а не дублироваться в каждую) .

Итак, у вас неправильно настроенная сборка. Вам нужно будет проверить настройки C / C ++ Runtime Library для каждой библиотеки, DLL и исполняемого файла в вашем проекте (который вы можете найти в настройках вашего проекта, в C / C ++ -> Code поколение) .

Вам необходимо убедиться, что каждая из них ссылается на одну и ту же библиотеку времени выполнения (т. Е. Debug DLL для всех параметров отладки, Release DLL для всех параметров выпуска).

Если это не помогает, то есть две другие возможные причины:

  1. Вы начали связываться со сторонней библиотекой, и это является причиной ошибки CRT. матч. По этой причине большинство библиотек поставляют сборки отладки и выпуска, поэтому, надеюсь, вам просто нужно обновить библиотеки, на которые вы ссылаетесь.
  2. Вы непреднамеренно добавляете библиотеку Debug в сборку выпуска (или в сборку выпуска, в exe отладки). Для этого вам необходимо проверить все дополнительные каталоги библиотеки и / или убедиться, что все выходные каталоги отладки и выпуска верны (т.е. вы случайно не компилируете отладочную библиотеку в папку сборки выпуска). ) .
...