2013-04-13 3 views
7

मैंने zlib 1.2.7 के लिए एक नया समाधान बनाया है, इसे स्थिर पुस्तकालय के रूप में सेट किया है, ./zlib/contrib/minizip से आवश्यक शीर्षलेख और स्रोत फ़ाइलों को जोड़ा और इसे ठीक से संकलित करने के लिए मिला। इसके बाद मैंने इसे libpng (एक स्थिर lib के रूप में भी) के खिलाफ जोड़ा, जो ठीक से संकलित करता है। फिर, मैंने libpng को अपने ग्राफिक्स इंजन प्रोजेक्ट (एक स्थिर लाइब्रेरी) से भी जोड़ा ... अभी भी कोई त्रुटि नहीं है।वीसी 11 में SAFESEH को सक्षम/अक्षम करना?

लेकिन जैसे ही मैं अपने ग्राफिक्स इंजन के लिए अपने मुख्य परियोजना से जोड़ने, मैं crc32.obj, deflate.obj, inflate.obj, d3dxplane.obj, d3dxvec4 के संबंध में कई LNK2026 त्रुटियों मिल .obj और अन्य zlib/directx संबंधित मॉड्यूल। यह मुझे बता रहा है कि वे मेरे ग्राफिक्स इंजन lib से आ रहे हैं, इसलिए मैंने संबंधित परियोजनाओं के लिए मेरे लिंकर झंडे में /SAFESEH:NO जोड़कर इसे ठीक करने का निर्णय लिया है।
नोट: मुझे शायद यह कहना चाहिए कि सभी परियोजनाएं x86 को लक्षित करने के लिए सेट हैं, न कि x64।

समस्या है, तथापि, अब मैं हो रही है:
warning LNK4044: unrecognized option '/SAFESEH'; ignored जो अपने मुख्य परियोजना में एक ही LINK2026 त्रुटियों का परिणाम है।
यदि मैं एक दृश्य स्टूडियो कमांड प्रॉम्प्ट खोलता हूं और LINK /? टाइप करता हूं तो यह पुष्टि करता है कि /SAFESEH एक मान्य लिंकर विकल्प है। मुझे एक ही त्रुटि मिलती है जब मैं /SAFESEH(बिना ': नहीं') का उपयोग करता हूं, और यदि मैं इसे पूरी तरह से छोड़ देता हूं तो मेरा मुख्य प्रोजेक्ट बस निर्माण से इंकार कर देता है।

यहां क्या हो रहा है? मैं इसके आसपास कैसे पहुंचू?

उत्तर

12

जोड़ने/SAFESH द्वारा: NO मेरी लिंकर झंडे

खैर के लिए, आप वर्तनी में गलती की। हो सकता है कि आपके प्रश्न में, शायद लिंकर सेटिंग्स में, संयोग की तरह जो समझाती है कि क्यों काम करना चाहिए कुछ काम नहीं करता है।

यह इसे टाइप किए बिना उपलब्ध है, इसे इस तरह से करने का पक्ष लें।प्रोजेक्ट + प्रॉपर्टीज, लिंकर, एडवांस्ड, दाएं पैनल को स्क्रॉल करें, "छवि में सुरक्षित अपवाद हैंडलर" सेटिंग है। नंबर

+0

वह एक टाइपो था। यह सभी परियोजनाओं में सही ढंग से वर्तनी है '/ सुरक्षा' के रूप में। एकमात्र प्रोजेक्ट जिसमें यह सेटिंग है, मेरा मुख्य प्रोजेक्ट है (अन्य लोग _Linker_ के बजाय _Librarian_ कहते हैं, और विकल्प _ लाइब्रेरियन -> "सभी विकल्प" _ के अंतर्गत मौजूद नहीं है। मैंने इसे अपने मुख्य प्रोजेक्ट में _NO_ में बदल दिया, और यह संकलित और बिना किसी त्रुटि के भाग गया ... लेकिन मैं इसे अपने स्थिर libs में समर्थन करके इसे गहरे स्तर पर बदल दूंगा, ताकि तीसरे पक्ष के देवताओं को मजबूर नहीं किया जाएगा इसे अपनी परियोजनाओं में अक्षम करने में। क्या यह संभव है? – RectangleEquals

+0

निश्चित रूप से, आपके द्वारा उपयोग किए जाने वाले सभी .libs का पुनर्निर्माण करें। –

+0

ज़्लिब, libpng, और मेरा इंजन केवल एक ही है जो मैं उपयोग करता हूं (d3d9.lib और d3dx9.lib के अलावा, जो निश्चित रूप से बंद स्रोत है) ... और जैसा कि मैंने कहा, वहां एक सेटिंग नहीं है उनमें से किसी में "छवि में सुरक्षित अपवाद हैंडलर हैं"। इसलिए, उन्हें पुनर्निर्माण कुछ भी हल नहीं करता है। और यदि ऐसा हुआ, तो मुझे पता चलेगा क्योंकि मैंने हमेशा अपनी मुख्य परियोजना के पुनर्निर्माण से पहले उन्हें पुनर्निर्माण किया है। तो अगर मैं एक वास्तविक समाधान चाहता हूं तो मैं स्क्वायर वन पर वापस आ गया हूं, या मैं अन्य देवताओं को अपनी परियोजनाओं में विकल्प को अक्षम करने के लिए मजबूर कर सकता हूं। – RectangleEquals

1

एक त्वरित google shows यह इंगित करता है कि आपको उपयुक्त कंपाइलर सेटिंग्स के साथ अपमानजनक मॉड्यूल को पुन: संकलित करने की आवश्यकता है।

ध्यान दें कि यह ध्वज केवल x86 लक्ष्यों के लिए काम करता है। यदि आप 64-बिट को लक्षित कर रहे हैं, तो आपको इस त्रुटि को ध्यान में रखेगा।

इसके अलावा, http://msdn.microsoft.com/en-us/library/9a89h429(v=vs.80).aspx से, प्रासंगिक हो सकता है जो:

लिंकर के लिए सबसे आम कारण नहीं निर्माण करने के लिए एक छवि क्योंकि एक या अधिक इनपुट फ़ाइलों के लिए (मॉड्यूल) है सक्षम होने के लिए लिंकर सुरक्षित अपवाद हैंडलर सुविधा के साथ संगत नहीं था। एक सुरक्षित अपवाद हैंडलर के साथ संगत नहीं होने के लिए मॉड्यूल का सामान्य कारण यह है क्योंकि इसे Visual C++ के पिछले संस्करण से एक कंपाइलर के साथ बनाया गया था।

यह उपयोगी होगा यदि आपने अपने कंपाइलर के संस्करण संख्याएं प्रदान की हैं, और आपकी लिपि की प्रतिलिपि कैसे बनाई गई थी (क्या आपने इसे स्वयं बनाया है, और यदि ऐसा है, तो उसी कंपाइलर के साथ?)।

+0

चुनने के लिए combobox का उपयोग करें मेरे प्रश्न में पहली वाक्य में कहा गया है कि मैंने वास्तव में इसे अपने नए समाधान में बनाया है, और शीर्षक + टैग इंगित करता है कि मैं vc11 का उपयोग कर रहा हूं। सब कुछ एक ही संकलक संस्करण के साथ किया जाता है। मैं यह उल्लेख करना भूल गया कि सभी परियोजनाएं x86 पर सेट हैं, इसलिए मैं इसके लिए अपना प्रश्न अपडेट करूंगा। – RectangleEquals

+0

इसके अलावा, क्या आपने zlib को '/ SAFESEH' विकल्प सेट से लिंक किया था? –

+1

हां, मैंने अपना प्रश्न पोस्ट करने से पहले कोशिश की। सभी परियोजनाएं मुझे त्रुटियों का एक ही सेट देती हैं। ऐसा लगता है जैसे/SAFESEH अब मेरे लिंकर में मौजूद नहीं है, भले ही यह कहता है। – RectangleEquals

संबंधित मुद्दे