Soru SAFESEH görüntü C ++ için güvensiz modül


Microsoft Visual Studio 2011 Professional Beta kullanıyorum

OpenCV C ++ dosyalarını çalıştırmaya çalışıyorum (http://opencv.willowgarage.com/wiki/Welcome) cMake & Visual Studio Complier kullanarak derledim.

Ancak, projede hata ayıklamaya gittiğimde, bunların çoğunda 600'den fazla hata var:

hata LNK2026: SAFESEH görüntüsü için modül güvensiz.

Görünüşe göre bu dosyalar opencv_ffmpeg projesinde bulunuyor ancak bunları bulamadım, Microsoft yardım sayfasındaki kasalarda Safe Exception Handlers sayfasına baktım ama herhangi bir kesin cevap bulamadım.

Başka birinin bu soruna sahip olup olmadığını ve düzeltmeyi başarırsa merak ediyordum.


76
2018-05-15 11:41


Menşei


Bu, derleyicinin önceki bir sürümü tarafından oluşturulan kodu içeren bir .obj veya .lib bağladığınızda gerçekleşir. Kaynak yerine opencv_ffmpeg için bir ikili yüklediyseniz, elbette ki hangisi yaygın olurdu. Linker seçeneğini devre dışı bırakabilirsiniz, ancak daha sonra bayt edebilecek bir CRT sürüm uyumsuzluğuna sahip olursunuz. Kütüphaneyi kaynaktan yeniden oluşturun. - Hans Passant
Yardımın için teşekkürler, işe yaradı - Aaron Thompson
@HansPassant Kaynak olmadığında ne yapılmalı? - GregC
Açık olan şey: kodun sahibinden size bir güncelleme sağlamasını isteyin. - Hans Passant
@HansPassant Umarım tedarikçi bir güncelleme yapmak üzere. "Bir tür kamyon faktörü" gibi bir problem gibi görünüyor. - GregC


Cevaplar:


Yorumlardan:

Bu, derleyicinin önceki bir sürümü tarafından oluşturulan kodu içeren bir .obj veya .lib bağladığınızda gerçekleşir. Kaynak yerine opencv_ffmpeg için bir ikili yüklediyseniz, elbette ki hangisi yaygın olurdu. Linker seçeneğini devre dışı bırakabilirsiniz, ancak daha sonra bayt edebilecek bir CRT sürüm uyumsuzluğuna sahip olursunuz. Kütüphaneyi kaynaktan yeniden oluşturun. - Hans Passant 13:01 de 15 Mayıs   
  
  Yardımın için teşekkürler, işe yaradı - Aaron Thompson 17:50 de 17:50


54
2017-11-03 16:36



Ayrıca, hata durumları gibi, linker'ın güvenli istisna işleyicileri bulamadığı modüller de olabilir. Özellikle meclis dili modülleri - diğer cevaplarda da tartışıldığı gibi. Bu konuda bazı bilgiler var İşte. - Nick Westgate


Proje özelliklerinde "Görüntünün Güvenli İstisnası İşleyicileri Var" seçeneği devre dışı bırakılması seçeneği -> Yapılandırma Özellikleri -> Bağlayıcı -> Gelişmiş sekmesi bana yardımcı oldu.


118
2017-09-10 16:48



Bunun benim için bir etkisi yoktu. - Pop-A-Stash
Aynı şekilde benim için. Yakalama öyle görünüyor ki, SAFESEH seçimini yapabilmem mümkün olsa da: linker ayarları altındaki Advanced Options alt menüsünde NO, seçili olmayacaktır. Her zaman GÜVENLİK: EVET'e geri döner. - user382459
VS 2013 Express ile Başarı - gbarry
Başarı, VS 2015 - Yuri S. Cherkasov
Başarı, VS 2012 - themadmax


Diğer yol ise, bazı ASH işleyicilerini (örneğin) asm dosyalarına eklemek ve bunları derlemek /safeseh seçeneğini, ardından diğer kodu normal şekilde derleyin /SAFESEH:YES derleyici seçeneği.

Boş SEH işleyici:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp

6
2017-11-27 10:03



3. taraf kaynağına (zlib) bir işleyici eklemekten rahatsız olmadım, /safeseh yeterli görünüyor. Bu gerçekten ayrılmalı! - mlt
Zlib ile aynı sorunları yaşayan herkes bunu görüyor (CTRL + F safeseh) tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall - codekiddy


Visual Studio'da ZLIB oluştururken bu hatayı aldıysanız çözüm burada. Aramak contrib\masmx86\bld_ml32.bat ve Ekle /safeseh bir seçenek olarak

Önce

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

Sonra

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

6
2018-05-15 18:38



Zlib ile aynı problemi yaşadım ama .asm Bunun yerine çözüm gezgininde dosyalar. - Cillié Malan


Yolculuğunuz değişebilir, ancak yukarıdaki önerilerin hiçbiri benim için işe yaramadı (her ne kadar kendi kişisel istismarı işleyicimi kullanmaya çalışmadım).

Çalışma, Release / x64 hedef oluşturmayı seçmek için ne yaptı?

Windows 10'u bir 64-bit makinede çalıştırıyorum ve Visual Studio 2015'i kullanıyorum.

Hedef Release / Win32 da çalışıyor. Sanırım ana şey "Bırak" ı seçmektir.


0