модуль небезопасным для изображения параметр / safeseh на C++
Я использую Microsoft Visual Studio 2011 Professional Beta
Я пытаюсь запустить файлы OpenCV C++ (http://opencv.willowgarage.com/wiki/Welcome), который я скомпилировал с помощью cMake и Visual Studio Complier.
однако, когда я иду отлаживать проект, я получаю 600 + ошибок, большинство из которых:
ошибка LNK2026: модуль небезопасен для безопасного изображения.
по-видимому, эти файлы находятся в opencv_ffmpeg проект, но я не мог их найти, я посмотрел на страницу safeseh Safe Exception Handlers на странице справки Microsoft, но я не смог найти никаких окончательных ответов.
Мне было интересно, если кто-то еще имел эту проблему, и если им удалось это исправить.
5 ответов:
из комментариев:
Это происходит, когда вы связываете an .obj или .lib, содержащий код, созданный более ранней версией компилятора. Что, конечно, было бы распространено, если бы вы загрузили двоичный файл для opencv_ffmpeg вместо источника. Вы можете отключить параметр компоновщика, но тогда у вас все равно будет несовместимость версии CRT, которая может байт. Перестроить библиотеку из исходного кода. - Ханс Пассант 15 мая в 13: 01
Спасибо за помощь, это сработало – Аарон Томпсон 17 мая в 14:50
отключение опции "изображение имеет Безопасные обработчики исключений" в свойствах проекта -> свойства конфигурации -> Компоновщик -> вкладка Дополнительно помогла мне.
другой способ-добавить некоторый обработчик SEH (например, пустой) в файлы asm и скомпилировать их с помощью
/safeseh
вариант, а затем скомпилировать другой код обычно с/SAFESEH:YES
опции компилятора.пустой обработчик SEH:
.safeseh SEH_handler SEH_handler proc ;handler ret SEH_handler endp
если вы получили эту ошибку при создании 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
ваш пробег может варьироваться, но ни одно из приведенных выше предложений не сработало для меня (хотя я не пытался свернуть свой собственный обработчик исключений asm).
что действительно работало, так это выбрать build target Release / x64.
Я запускаю Windows 10 на 64-разрядной машине и использую Visual Studio 2015.
целевой релиз / Win32 тоже работает. Я думаю, главное-выбрать "выпуск".