"Неразрешенный внешний символ __except_handler4_common" в Visual Studio 2015
Я компилирую устаревшее приложение Visual Studio 6.0 С++ в Visual Studio 2015, и я столкнулся с этой ошибкой, и поиск в сети не принес какой-либо полезной информации.
LNK2019 неразрешенный внешний символ __except_handler4_common, указанный в функции __except_handler4 (MSVCRT.lib)
Я понимаю, что где-то в коде ссылка на метод больше не существует (?), присутствующая в текущих версиях MSVCRT. Есть ли для этого флаг обхода/компиляции?
Ответы
Ответ 1
Сообщение об ошибке на самом деле говорит, что функция __except_handler4
, определенная в MSVCRT.LIB, ссылается на символ undefined __except_handler4_common
. Так что это не ваш код, который делает эту ссылку, это код Visual Studio 2015.
Символ __except_handler4_common
определяется в файле vcruntime.lib. Этот файл должен быть автоматически связан. Я не уверен, почему это не так. Вы выбрали статическую библиотеку времени выполнения в параметрах проекта ( "Многопоточный (/MT)" ), но затем вручную добавьте MSVCRT.LIB(часть динамической библиотеки времени выполнения C)?
Ответ 2
Для меня я привязывался к объектам статического проекта из нестатического unit test. Я попытался установить статическую сборку unit test, но тогда компилятор (VС++ 2015) получил ошибку An internal error has occurred in the compiler
. Я закончил настройку как основного проекта, так и проекта unit test на "Использовать MFC в общей DLL", а затем он сработал.
Ответ 3
В вашем проекте библиотеки выберите "Свойства" → C/С++ → Генерация кода → Библиотека времени выполнения
Скорее всего, он настроен на "Multi Threaded Debug DLL" (/MDd).
Измените его на "Multi Threaded Debug" (/MTd) и перестройте.