Модуль небезопасен для SAFESEH изображение С++

Я использую бета-версию Microsoft Visual Studio 2011 Professional

Я пытаюсь запустить файлы OpenCV С++ (http://opencv.willowgarage.com/wiki/Welcome), которые я скомпилировал с использованием cMake и Compliance для Visual Studio.

Однако, когда я иду на отладку проекта, я получаю более 600 ошибок, большинство из которых:

ошибка LNK2026: модуль небезопасен для изображения SAFESEH.

По-видимому, эти файлы находятся в проекте opencv_ffmpeg, но я не смог их найти, я просмотрел страницу Safeesception Handels SafeesEx на странице справки Microsoft, но я не смог найти окончательных ответов.

Мне было интересно, есть ли у кого-нибудь еще эта проблема, и если им удалось это исправить.

Ответ 1

Из комментариев:

Это происходит, когда вы связываете .obj или .lib, который содержит код, созданный более ранней версией компилятора. Это, конечно, было бы общим, если вы загрузили двоичный файл для opencv_ffmpeg вместо источника. Вы можете отключить параметр компоновщика, но тогда у вас все еще будет несовместимость версии CRT, которая может быть байтом. Восстановите библиотеку из источника. - Ханс Пассант 15 мая в 13:01

Спасибо за помощь, это сработало - Аарон Томпсон 17 мая в 14:50

Ответ 2

Отключение опции "Изображение имеет безопасные обработчики исключений" в свойствах проекта → Свойства конфигурации → вкладка Linker → Advanced помогла мне.

Ответ 3

Другим способом является добавление некоторого обработчика SEH (например, пустого) в asm файлы и компиляция с опцией /safeseh, а затем компилирование другого кода с помощью опции /SAFESEH:YES компилятора.

Пустой обработчик SEH:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp

Ответ 4

Ваш пробег может отличаться, но ни один из вышеперечисленных предложений не работал у меня (хотя я не пытался запустить собственный обработчик исключения asm).

Какова была работа по выбору цели сборки Release/x64.

Я запускаю Windows 10 на 64-разрядной машине и использую Visual Studio 2015.

Также работает целевая версия Release/Win32. Я думаю, главное - выбрать "Release".

Ответ 5

Если вы получили эту ошибку при создании ZLIB в Visual Studio, это решение. Найдите contrib\masmx86\bld_ml32.bat и добавьте /safeseh в качестве опции

До

ml /coff /Zi /c /Flmatch686.lst match686.asm
ml /coff /Zi /c /Flinffas32.lst inffas32.asm

После

ml /safeseh /coff /Zi /c /Flmatch686.lst match686.asm
ml /safeseh /coff /Zi /c /Flinffas32.lst inffas32.asm