2009-09-08 14 views
7

ith विजुअल स्टूडियो 2008 का उपयोग करते हुए 64 बिट विंडोज प्लेटफ़ॉर्म के लिए सी ++ स्थिर लाइब्रेरी को संकलित करना, यदि कॉन्फ़िगरेशन प्रकार एक स्थिर लाइब्रेरी है, तो मुझे प्रोजेक्ट गुणों में एक लिंकर विकल्प नहीं दिखाई देता है। मुझे एक स्थिर पुस्तकालय के लिए निर्दिष्ट/मशीन: x64 विकल्प निर्दिष्ट करने की आवश्यकता है। मैंने लाइब्रेरियन में कमांड लाइन विकल्प में इसे निर्दिष्ट करने का प्रयास किया। केवल तभी मैं स्थिर पुस्तकालय का निर्माण कर सकता था। यदि मैं LNK1112 के साथ स्थैतिक lib को संकलित/मशीन निर्दिष्ट नहीं करता हूं: मॉड्यूल मशीन प्रकार 'X86' लक्ष्य मशीन प्रकार 'x64' के साथ संघर्ष करता है (भले ही मैं अपने समाधान के लिए प्लेटफॉर्म को X64 पर सेट करता हूं)।वीएस -2008

के साथ/मशीन: X64 परियोजना-गुण-लाइब्रेरियन के माध्यम से कमांड लाइन के रूप में निर्दिष्ट, स्थिर पुस्तकालय बनाया गया था, लेकिन उसी समाधान में अन्य प्रोजेक्ट (कॉन्फ़िगरेशन प्रकार: डीएलएल) की स्थिरता स्थिर lib पर निर्भरता है, जब DLL बनाया गया है और lib में कार्यों में से एक का उपयोग करने के मैं फिर से एक ही त्रुटि मिलती है की कोशिश करता है है:, कैसे मॉड्यूल मशीन प्रकार लक्ष्य मशीन प्रकार '64' के साथ 'X86' संघर्ष

कृपया सुझाव है:

गंभीर त्रुटि LNK1112 क्या मैं एक 64 बिट स्थैतिक पुस्तकालय

उत्तर

1

क्या आपने एक नई परियोजना कॉन्फ़िगरेशन (x64) को वें जोड़ने का प्रयास किया ई मौजूदा परियोजना?

आपको आमतौर पर 64 बिट में निर्माण करने के लिए प्रोजेक्ट गुणों को संपादित नहीं करना चाहिए। आपको केवल कॉन्फ़िगरेशन जोड़ना होगा और सुनिश्चित करना होगा कि समाधान कॉन्फ़िगरेशन सही है (64 बिट समाधान कॉन्फ़िगरेशन में 64 बिट प्रोजेक्ट कॉन्फ़िगरेशन हैं)।

आप बिल्ड-> कॉन्फ़िगरेशन प्रबंधक खोलकर इसे देख सकते हैं। मेरा विजुअल स्टूडियो कभी-कभी इन सेटिंग्स के साथ गड़बड़ करता है और परियोजना को असंभव बनाता है, इसलिए इसे फिर से जांचने में मदद मिल सकती है।

8

इसके लायक होने के लिए, मैं इस सटीक मुद्दे पर आया हूं।

मेरे पास एक प्रोजेक्ट है जो स्थिर लाइब्रेरी को संकलित करता है, और "x64" कॉन्फ़िगरेशन बनाने से यह वास्तव में x64 को लक्षित नहीं करता है। मुझे प्रोजेक्ट के प्रॉपर्टी पेजों में "लाइब्रेरियन -> कमांड लाइन" के तहत "अतिरिक्त विकल्प" के रूप में स्पष्ट रूप से "/ मशीन: एक्स 64" जोड़ना था, जैसा आपने किया था।

मैं दृश्य स्टूडियो को संपत्ति पृष्ठों में प्रथम श्रेणी की संपत्ति के रूप में इस सेटिंग को बेनकाब करने की अपेक्षा करता हूं, क्योंकि यह गतिशील पुस्तकालयों ("लिंकर -> उन्नत -> लक्ष्य मशीन" के अंतर्गत) के लिए करता है। शायद मुझे कुछ याद आ रही है।

2

जैसा कि टिम्बो ने उल्लेख किया है, आपको यह सुनिश्चित करने की आवश्यकता है कि आपके पास एक x64 कॉन्फ़िगरेशन है जिसे आप बना रहे हैं।

  • करें अपने निर्माण निर्देशिका की कुल स्वच्छ पहले मामले में आप अभी भी है कि भ्रम पैदा कर रहे हैं
  • चेक चारों ओर झूठ बोल रही है कुछ 32 बिट वस्तु फ़ाइलें: हालांकि, वहाँ अन्य gotchas की एक जोड़ी के बारे में पता होना करने के लिए कर रहे हैं आपकी परियोजना के लिए मध्यवर्ती और आउटपुट निर्देशिका। यदि गंतव्य Debug\Mylib.lib है तो आप समस्याओं में भागने जा रहे हैं क्योंकि 32 और 64 बिट पुस्तकालयों के लिए समान नाम का उपयोग किया जा रहा है। मैं सभी कॉन्फ़िगरेशन और सभी प्लेटफ़ॉर्म का चयन करना पसंद करता हूं और फिर उन्हें ..\build\$(ProjectName)\$(ConfigurationName).$(PlatformName)
  • कॉन्फ़िगरेशन मैनेजर में जांचें कि जब आप समाधान के 64-बिट कॉन्फ़िगरेशन को बना रहे हैं तो यह 64-बिट बनाने के लिए कॉन्फ़िगर किया गया है परियोजनाओं की विन्यास (यह हमेशा डिफ़ॉल्ट रूप से नहीं होती है)
  • त्रुटि: module machine type 'X86' conflicts with target machine type 'x64' का अर्थ है कि ऑब्जेक्ट फ़ाइल 32-बिट के रूप में बनाई गई है लेकिन परियोजना की लिंक सेटिंग ध्वज /machine:x64 के साथ सेट की गई है।तो यह सुझाव देता है कि परियोजना विन्यास 32-बिट है।
  • आप क्या बना लिया है के बारे में संदेह में हैं, तो वस्तु फ़ाइलों में से एक उठाओ और एक कमांड प्रॉम्प्ट पर इस टाइप करें:

    dumpbin /headers myfile.obj | findstr machine

यह आपको वास्तुकला आप वास्तव में है दिखाएगा के लिए बनाया गया

+0

मुझे बिंदु 4 समझ में नहीं आता है, आपका क्या मतलब है "32-बिट के रूप में बनाया गया है लेकिन परियोजना की लिंक सेटिंग ध्वज/मशीन के साथ सेट है: x64"। मैं केवल एक बिंदु देख सकता हूं जिस पर आप सेट/मशीन प्रकार सेट कर सकते हैं। –

+0

यह सच है कि कॉन्फ़िगरेशन में केवल एक बिंदु है जहां आप प्रकार सेट कर सकते हैं, लेकिन ऐसा हो सकता है कि 32 और 64-बिट कॉन्फ़िगरेशन दोनों एक ही आउटपुट फ़ाइल में बिल्डिंग को समाप्त कर देते हैं, जो इस त्रुटि को उत्पन्न करेगा। यह तब भी हो सकता है जब आप दृश्य स्टूडियो परियोजनाओं के बजाय 'NMAKE' का उपयोग कर रहे हों। –

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