"Неразрешенный внешний символ __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) и перестройте.