"Неразрешенный внешний символ, кроме handler4 common" в Visual Studio 2015

я компилирую устаревшее приложение Visual Studio 6.0 C++ в Visual Studio 2015, и я столкнулся с этой ошибкой, и поиск в сети не дал никакой полезной информации.

lnk2019 неразрешенный внешний символ _ _ кроме _ handler4_common ссылка в функции _ _ кроме_handler4 (MSVCRT.lib)

Я понимаю, что где-то в коде больше нет ссылки на метод(?) присутствует в текущих версиях MSVCRT. Есть ли обходной путь / флаг компилятора для это?

4 ответов


сообщение об ошибке фактически говорит функцию __except_handler4, определенный в MSVCRT.LIB, ссылается на неопределенный символ __except_handler4_common. Таким образом, это не ваш код, который делает эту ссылку, это код Visual Studio 2015.

символ __except_handler4_common определяется в vcruntime.движение за освобождение. Этот файл должен быть автоматически связан в. Не знаю почему. Вы выбрали статическую библиотеку времени выполнения в параметрах проекта ("многопоточный (/MT)"), но затем вручную добавили MSVCRT.ДВИЖЕНИЕ ЗА ОСВОБОЖДЕНИЕ (часть библиотеки среды выполнения dynamic C)?


для меня я связывался с объектами статического проекта из нестатического модульного теста. Я попытался установить модульный тест на статическую сборку, но затем компилятор (VC++ 2015) получил ошибку An internal error has occurred in the compiler. Я закончил настройку как основного проекта, так и проекта модульного теста на "использование MFC в общей DLL", а затем он работал.


в проекте библиотеки проверьте свойства - > C / C++ - > генерация кода - > библиотека времени выполнения

скорее всего, он установлен в "многопоточная отладочная DLL" (/MDd).

измените его на "многопоточная отладка" (/MTd) и перестройте.


причина этой ошибки зависит.

для меня это было " libcmt.lib " и " libcmtd.lib " явно указан среди входов компоновщика, а не путем выбора его из поля "библиотека времени выполнения" в GUI.