модуль небезопасным для изображения параметр / 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 77

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 тоже работает. Я думаю, главное-выбрать "выпуск".