मैंने 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
(बिना ': नहीं') का उपयोग करता हूं, और यदि मैं इसे पूरी तरह से छोड़ देता हूं तो मेरा मुख्य प्रोजेक्ट बस निर्माण से इंकार कर देता है।
यहां क्या हो रहा है? मैं इसके आसपास कैसे पहुंचू?
वह एक टाइपो था। यह सभी परियोजनाओं में सही ढंग से वर्तनी है '/ सुरक्षा' के रूप में। एकमात्र प्रोजेक्ट जिसमें यह सेटिंग है, मेरा मुख्य प्रोजेक्ट है (अन्य लोग _Linker_ के बजाय _Librarian_ कहते हैं, और विकल्प _ लाइब्रेरियन -> "सभी विकल्प" _ के अंतर्गत मौजूद नहीं है। मैंने इसे अपने मुख्य प्रोजेक्ट में _NO_ में बदल दिया, और यह संकलित और बिना किसी त्रुटि के भाग गया ... लेकिन मैं इसे अपने स्थिर libs में समर्थन करके इसे गहरे स्तर पर बदल दूंगा, ताकि तीसरे पक्ष के देवताओं को मजबूर नहीं किया जाएगा इसे अपनी परियोजनाओं में अक्षम करने में। क्या यह संभव है? – RectangleEquals
निश्चित रूप से, आपके द्वारा उपयोग किए जाने वाले सभी .libs का पुनर्निर्माण करें। –
ज़्लिब, libpng, और मेरा इंजन केवल एक ही है जो मैं उपयोग करता हूं (d3d9.lib और d3dx9.lib के अलावा, जो निश्चित रूप से बंद स्रोत है) ... और जैसा कि मैंने कहा, वहां एक सेटिंग नहीं है उनमें से किसी में "छवि में सुरक्षित अपवाद हैंडलर हैं"। इसलिए, उन्हें पुनर्निर्माण कुछ भी हल नहीं करता है। और यदि ऐसा हुआ, तो मुझे पता चलेगा क्योंकि मैंने हमेशा अपनी मुख्य परियोजना के पुनर्निर्माण से पहले उन्हें पुनर्निर्माण किया है। तो अगर मैं एक वास्तविक समाधान चाहता हूं तो मैं स्क्वायर वन पर वापस आ गया हूं, या मैं अन्य देवताओं को अपनी परियोजनाओं में विकल्प को अक्षम करने के लिए मजबूर कर सकता हूं। – RectangleEquals