2015-12-15 5 views
2

У меня есть visual studio 2012 C++ project. Недавно я удалил его и установил визуальную студию 2015 и обновил проект. Когда я строй проекта, получаю ошибку, как показано ниже:memcmp linker error Visual Studio 2015

LNK2019 Ошибки неразрешенный внешний символ _memcmp ссылка в функции

Кроме того я нигде не используется в моем коде memcmp fucntion.

Я использовал многословные функции компоновщика и мог видеть ниже в выходном файле:

Найдено _memcmp

Реферированы в Мусе ++ Project.obj

Реферированы в libcpmtd.lib (xstrcoll. OBJ)

нагруженное libvcruntimed.lib (__ memcmp_.obj)

Два вопроса здесь

1.если даже если я не использовал memcmp в своем коде, почему я получаю эту ошибку компоновщика?

2.Why является memcmp быть загружен как __memcmp_.obj

Я следующие настройки также в моем проекте:

1.С ++ -> генерации кода -> Runtime библиотеки устанавливается в/MTd

2.Linker -> Игнорировать библиотеки Все по умолчанию установлено ничего

Я перепробовал все настройки проекта, но все напрасно.

У меня проблема только с этой функцией memcmp, которую я не использовал.

Я использовал mamcpy и MemSet и не имею проблем с теми

+1

Возможных дублировать [Почему я не могу создать Vim с инструментами командной строки Visual Studio 2015 RC?] (http: // stackoverflow.com/questions/29986585/why-am-i-not-able-to-build-vim-with-visual-studio-2015-rc-command-line-tools) –

+0

У меня проблема только с функцией memcmp, которая у меня есть не используется. Я использовал memcpy и memset в своем коде, и у них нет никаких проблем. – Roop

+0

Подробный вывод говорит xstrcoll.obj referenecs _memcmp, так что, вероятно, ответ на ваш первый вопрос. – stijn

ответ

7

Явным добавить vcruntime.lib или другую подходящую версию CRT Library для параметров компоновщика (дополнительная зависимость).

Когда вы используете memcmp явно, он, вероятно, обрабатывается как intrinsic function и скомпилирован как встроенная функция.

+2

Явная привязка к vcruntime.lib исправила эту проблему для меня. Я переношу приложение C++ из VS2005 в VS2015 и сталкивался с этой ошибкой при компиляции прокси-серверов IDL. Сгенерированный код использует макрос IID_GENERIC_CHECK_IID, который использует memcmp. –

+0

Я добавил vcruntime.lib, ucrt.lib, убедился, что я/MD и изменил вызов msvcrtd.lib на msvcrt.lib для libpng (более старая версия и libz 1.2.5), чтобы правильно строить из включенных файлов проекта на окна. – twobob

2

Постарайтесь добавить vcruntime.lib и ucrt.lib в свои дополнительные зависимости. ===> свойства-> Linker-> Вход-> Дополнительные зависимости

Пример путь 'vcruntime.lib': "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\vcruntime.lib"

Образца пути 'ucrt.lib' : "C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\ucrt\x86\ucrt.lib"

Моей среды: VS2017 (v141)