2009-08-03 22 views
6

मेरे पास 3 बिल्ड मशीन हैं। विंडोज 2000 पर चल रहा है, एक एक्सपी एसपी 3 और एक 64 बिट विंडोज सर्वर 2008 के साथ। और मेरे पास एक मूल सी ++ प्रोजेक्ट बनाने के लिए है (मैं विजुअल स्टूडियो 2005 एसपी 1 के साथ निर्माण कर रहा हूं)। मेरा लक्ष्य इन बिल्ड मशीनों का उपयोग करके एक ही डीएलएल को "बिल्कुल" बनाना है।विभिन्न प्रणालियों पर समान निर्माण

बिल्कुल मेरा मतलब थोड़ा सा है (कोर्स के टाइमस्टैम्प को छोड़कर)।

win2k और winxp के साथ मुझे समान डीएल मिल रहा है। लेकिन वे Win2008 सर्वर के साथ निर्मित डीएलएल से अलग हैं। मैं लगभग समान डीएल प्राप्त करने में कामयाब रहा हूं, लेकिन कुछ अंतर हैं। फ़ाइलों को अलग करने के बाद मुझे पता चला कि फ़ंक्शन ऑर्डर समान नहीं है (3 फ़ंक्शन अलग-अलग क्रम में हैं)।

क्या किसी को पता है कि इसके लिए क्या कारण हो सकता है?

और एक पक्ष प्रश्न: vcbuild.exe में मुझे एक स्विच/ऑर्डर मिला है। जो इनपुट के रूप में फ़ंक्शन ऑर्डर फ़ाइल लेता है। कोई भी जानता है कि वह फ़ाइल कैसा दिखना चाहिए?

+0

क्या आपने 32-बिट संगतता मोड (या जिसे भी कहा जाता है) में वीएस चलाने का प्रयास किया है? – Makis

+0

इसे 32-बिट कंपैट में चलाने के लिए है, दृश्य स्टूडियो AFAIK – ppiotrowicz

+1

का कोई 64 बिट संस्करण नहीं है 1. क्या सर्वर 2008 मशीन एक अलग CPU चला रही है? (मैंने एक बार एक समान मुद्दा देखा है जहां एक एएमडी मशीन ने इंटेल को थोड़ा अलग आउटपुट बनाया - अजीब लेकिन सच)। 2. क्या आपने स्थापित अद्यतनों की जांच की है कि क्या वहां कुछ भी किसी भी वीएस घटकों को बदल गया है? –

उत्तर

7

आपको लगता है कि संकलन पूरी तरह से निर्धारिती है (समान इनपुट समान उत्पादन देता है, हर बार) लेकिन यह मामला नहीं होना चाहिए। उदाहरण के लिए, ऑप्टिमाइज़र पर विचार करें - इसमें कुछ मेमोरी की आवश्यकता होगी, शायद उच्च अनुकूलन विधियों के लिए। यदि एक मशीन पर एक स्मृति आवंटन विफल रहता है (क्योंकि मशीन में कम स्मृति है) तो संकलक उस विशिष्ट अनुकूलन को छोड़ सकता है, जिसके परिणामस्वरूप अलग-अलग कोड उत्सर्जित हो जाते हैं।

ऐसी कई स्थितियां हैं, इसलिए आप ऐसा कुछ करने में काफी प्रयास कर रहे हैं जो करने योग्य नहीं है। आपको डीएलएल को थोड़ा सा समान होने की आवश्यकता क्यों है, वैसे भी?

+0

ऑप्टिमाइज़ेशन बंद होने के साथ (/ ओडी स्विच) मुझे एक ही समस्या है। इस परियोजना में बिटवाईव समानता महत्वपूर्ण है (वास्तव में क्यों नहीं, माफ कर सकते हैं)। – ppiotrowicz

+2

अनुकूलन की बात सिर्फ एक उदाहरण थी - ऐसी कई चीजें हैं जो संकलक को विभिन्न आउटपुट उत्पन्न कर सकती हैं। –

0

क्या आप श्रृंखला उपकरण (कंपाइलर, लिंकर, ...) का एक ही संस्करण चलाते हैं, जिसमें 32/64 बिट्स अंतर शामिल है?

+0

के लिए धन्यवाद हाँ, मैं बनाम2005 के साथ हर जगह SP1 के साथ निर्माण कर रहा हूं (.NET 2.0 SP1 भी स्थापित है)। Win32 प्लेटफॉर्म पर बिल्डिंग। – ppiotrowicz

+0

क्या आप वाकई कंपाइलर के 32 बिट संस्करण और Win2008 पर लिंकर का उपयोग कर रहे हैं? – AProgrammer

+0

हाँ, मुझे यकीन है। वे प्रोग्राम फाइलों में हैं (x86) – ppiotrowicz

0

क्या विंडोज सर्वर 2008 एकमात्र मशीन 64 बिट चल रही है? यदि ऐसा है, तो यह आपकी समस्या हो सकती है।

+0

यह हो सकता है, लेकिन 32 बिट सिस्टम से डीएलएस लगभग समान हैं। केवल अंतर यह है कि _3_ फ़ंक्शंस अलग-अलग क्रम में हैं (और प्रोजेक्ट में बहुत से फ़ंक्शन हैं)। असंबद्ध कोड लगभग समान है। – ppiotrowicz

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