модуль небезпечний для SAFESEH зображення C ++


87

Я використовую Microsoft Visual Studio 2011 Professional Beta

Я намагаюся запустити файли OpenCV C ++ ( http://opencv.willowgarage.com/wiki/Welcome ), які я скомпілював за допомогою cMake & Visual Studio Complier.

Однак, коли я йду налагоджувати проект, я отримую 600+ помилок, більшість з яких:

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

Очевидно, ці файли знаходяться в проекті opencv_ffmpeg, але я не зміг їх знайти, я подивився сторінку Safeseh Safe Exception Handlers на сторінці довідки Microsoft, але не зміг знайти остаточних відповідей.

Мені було цікаво, чи мала хтось ще цю проблему і чи вдалося її вирішити.


12
Це трапляється, коли ви пов'язуєте файл .obj або .lib, який містить код, створений попередньою версією компілятора. Що, звичайно, було б загальним, якщо ви завантажили двійковий файл для opencv_ffmpeg замість джерела. Ви можете вимкнути функцію компонування, але тоді ви все ще матимете несумісність версії ЕПТ, яка може бути в байтах. Відновити бібліотеку з джерела.
Ганс Пассант,

Дякую за допомогу, це спрацювало
Аарон Томпсон,

@HansPassant Що робити, коли джерела немає?
GregC

4
Очевидне: попросіть власника коду надати вам оновлення.
Ганс Пасант,

@HansPassant Я сподіваюся, що постачальник все ще готовий зробити оновлення. Звучить як проблема "вантажівки одного" виду.
GregC

Відповіді:


63

З коментарів:

Це трапляється, коли ви пов'язуєте файл .obj або .lib, який містить код, створений попередньою версією компілятора. Що, звичайно, було б загальним, якщо ви завантажили двійковий файл для opencv_ffmpeg замість джерела. Ви можете вимкнути функцію компонування, але тоді ви все ще матимете несумісність версії ЕПТ, яка може бути в байтах. Відновити бібліотеку з джерела. - Ганс Пасант 15 травня о 13:01  
 
Дякую за допомогу, це спрацювало - Аарон Томпсон, 17 травня о 14:50


Це також може бути спричинено, як стверджує помилка, модулями, для яких компонувальник не може знайти безпечні обробники винятків. Зокрема, модулі мови асамблеї - як це обговорювалось в інших відповідях. Існує деяка інформація про це тут .
Нік Вестгейт

148

Вимкнення опції "Зображення має безпечні обробники винятків" у властивостях проекту -> Властивості конфігурації -> Посилання -> Вкладка Додатково мені допомогло.


3
Для мене це ніяк не вплинуло.
Pop-A-Stash

Так само для мене. Здається, криється в тому, що, хоча я можу вибрати SAFESEH: NO у підменю Додаткові параметри в налаштуваннях лінкера, він не залишиться вибраним. Завжди повертається до SAFESEH: ТАК.
user382459

Успіх, з VS 2013 Express
gbarry

1
Успіх, VS 2015

2
Успіх, VS 2017
ke4ktz

12

Якщо ця помилка виникла під час створення 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

У мене була та ж проблема з zlib, але .asmзамість цього довелося змінити реквізити у файлах у провіднику рішень.
Cillié Malan

11

Інший спосіб - додати якийсь обробник SEH (наприклад, порожній) до файлів asm і скомпілювати їх за допомогою /safesehопції, а потім скомпілювати інший код, як правило, за допомогою /SAFESEH:YESопції компілятора.

Порожній обробник SEH:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp

1
Я не турбувався додаванням обробника до стороннього джерела (zlib), /safesehздається, досить. Це справді слід проголосувати!
mlt

2
Хто має однакові проблеми зі zlib, дивіться це (CTRL + F safeseh) tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall
codekiddy

Я додав "/ safeseh" до командного рядка у властивостях файлу .asm, і це спрацювало.
Норберт Борос

0

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

Що вдалося - це вибрати цільовий компонент випуску / x64.

Я працюю під керуванням Windows 10 на 64-розрядному комп'ютері та використовую Visual Studio 2015.

Цільовий Release / Win32 також працює. Думаю, головне - вибрати "Відпустити".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.