Модуль небезопасен для 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