SAFESEH छवि C ++ के लिए असुरक्षित मॉड्यूल


87

मैं Microsoft Visual Studio 2011 व्यावसायिक बीटा का उपयोग कर रहा हूँ

मैं OpenCV C ++ फ़ाइलों ( http://opencv.willowgarage.com/wiki/Welcome ) को चलाने का प्रयास कर रहा हूं जिन्हें मैंने cMake और Visual Studio Complier का उपयोग करके संकलित किया है।

हालाँकि जब मैं इस परियोजना को डीबग करने जाता हूं तो मुझे 600+ त्रुटियाँ मिलती हैं:

LNK2026 त्रुटि: SAFESEH छवि के लिए असुरक्षित मॉड्यूल।

जाहिरा तौर पर ये फाइलें opencv_ffmpeg परियोजना में हैं, लेकिन मैं उन्हें नहीं ढूंढ सका, मैंने Microsoft सहायता पृष्ठ पर safeseh सुरक्षित अपवाद हैंडलर पृष्ठ पर एक नज़र डाली है, लेकिन मुझे कोई निश्चित उत्तर नहीं मिला।

मैं सोच रहा था कि क्या किसी और को यह समस्या है और अगर वे इसे ठीक करने में कामयाब रहे।


12
ऐसा तब होता है जब आप एक .obj या .lib लिंक करते हैं जिसमें कंपाइलर के पुराने संस्करण द्वारा बनाया गया कोड होता है। यदि आप स्रोत के बजाय opencv_ffmpeg के लिए बाइनरी डाउनलोड करते हैं, तो कौन सा पाठ्यक्रम सामान्य होगा। आप लिंकर विकल्प को बंद कर सकते हैं लेकिन तब आपके पास अभी भी सीआरटी संस्करण की असंगति होगी जो बाइट कर सकती है। स्रोत से लाइब्रेरी का पुनर्निर्माण करें।
हंस पासेंट

मदद के लिए धन्यवाद, यह काम किया
हारून थॉम्पसन

@ हंसपसंद कोई स्रोत न होने पर क्या करें?
15

4
स्पष्ट बात: आपको अपडेट प्रदान करने के लिए कोड के स्वामी से पूछें।
हंस पाजी

@HansPassant मुझे उम्मीद है कि आपूर्तिकर्ता अभी भी अपडेट करने के लिए आसपास है। एक "ट्रक कारक एक" तरह की समस्या की तरह लगता है।
ग्रेग सिप

जवाबों:


63

टिप्पणियों से:

ऐसा तब होता है जब आप एक .obj या .lib लिंक करते हैं जिसमें कंपाइलर के पुराने संस्करण द्वारा बनाया गया कोड होता है। यदि आप स्रोत के बजाय opencv_ffmpeg के लिए बाइनरी डाउनलोड करते हैं, तो कौन सा पाठ्यक्रम सामान्य होगा। आप लिंकर विकल्प को बंद कर सकते हैं लेकिन फिर भी आपके पास सीआरटी संस्करण की असंगति होगी जो बाइट कर सकती है। स्रोत से लाइब्रेरी का पुनर्निर्माण करें। - हंस पैसेंट 15 मई को 13:01  
 
मदद के लिए धन्यवाद, इसने काम किया - आरोन थॉम्पसन 17 मई 14:50 बजे


यह कारण भी हो सकता है, जैसा कि त्रुटि बताता है, मॉड्यूल जिनके लिए लिंकर को सुरक्षित अपवाद हैंडलर नहीं मिल सकते हैं। विधानसभा भाषा मॉड्यूल विशेष रूप से - जैसा कि अन्य उत्तरों में चर्चा की गई है। इस बारे में कुछ जानकारी यहाँ है
निक वेस्टगेट

148

प्रोजेक्ट गुणों में "छवि में सुरक्षित अपवाद हैंडलर" अक्षम करना -> कॉन्फ़िगरेशन गुण -> लिंकर -> उन्नत टैब ने मेरी मदद की।


3
मेरे लिए इसका कोई प्रभाव नहीं था।
पॉप-ए-स्टैश

इसी तरह मेरे लिए। यह प्रतीत होता है कि हालांकि, मैं SAFESEH चुन सकता हूं: लिंकर सेटिंग्स के तहत उन्नत विकल्प सबमेनू में NO, यह चुना नहीं रहेगा। यह हमेशा SAFESEH: YES में वापस लौटता है।
user382459

सफलता, वीएस 2013 एक्सप्रेस के साथ
गार्बरी

1
सफलता, वीएस 2015

2
सफलता, वीएस 2017
ke4ktz

12

यदि आपको Visual Studio में ZLIB का निर्माण करते समय यह त्रुटि मिली है तो समाधान है। विकल्प के रूप में देखें 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इसके बजाय समाधान एक्सप्लोरर में फाइलों पर प्रॉपर बदलना पड़ा ।
सिल्ली मालन

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

मैंने .asm फ़ाइल के लिए गुणों में कमांड लाइन में "/ safeseh" जोड़ा है और यह काम किया है।
नॉर्बर्ट बोरोस

0

आपका माइलेज अलग-अलग हो सकता है, लेकिन उपरोक्त सुझावों में से किसी ने भी मेरे लिए काम नहीं किया (हालांकि मैंने अपना खुद का अपवाद हैंडलर रोल करने की कोशिश नहीं की)।

बिल्ड टारगेट रिलीज़ / x64 का चयन करने के लिए क्या काम किया गया था।

मैं 64-बिट मशीन पर विंडोज 10 चला रहा हूं, और विजुअल स्टूडियो 2015 का उपयोग कर रहा हूं।

लक्ष्य रिलीज़ / Win32 काम करता है, भी। मुझे लगता है कि मुख्य बात "रिलीज" चुनना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.