2010-04-05 13 views
6

के तहत विंडोज एक्सपी के लिए संकलित कैसे करूं मैं विंडोज 7 और विजुअल स्टूडियो 2008 प्रो चला रहा हूं और विंडोज एक्सपी एसपी 3 पर काम करने के लिए अपना आवेदन प्राप्त करने की कोशिश कर रहा हूं।मैं विंडोज 7/विजुअल स्टूडियो 2008

यह वास्तव में कम से कम कमांड लाइन कार्यक्रम इसलिए किसी भी हास्यास्पद निर्भरता क्यों होना चाहिए:

// XPBuild.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    printf("Hello world"); 
    getchar(); 
    return 0; 
} 

मैंने कहीं पढ़ा है कि defining several constants such as WINVER मुझे अन्य प्लेटफार्मों के लिए संकलित करने के लिए अनुमति चाहिए। मैं कोशिश की है मेरी /D संकलक विकल्पों के लिए निम्न कहा:

;WINVER=0x0501;_WIN32_WINNT 0x0501;NTDDI_VERSION=NTDDI_WINXP 

लेकिन है कि कोई फर्क पड़ा। जब मैं अपने Windows XP मशीन पर इसे चलाने के (वास्तव में एक virtualbox में चल रहे) मैं पाने के निम्न त्रुटि:

This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

तो क्या मैं याद किया है? क्या एमएसवीसी संकलित प्रोग्राम या एक अलग कंपाइलर विकल्प या कुछ और चलाने के लिए कुछ और आवश्यक है?

+0

इसके लायक होने के लिए, सबसे छोटा मानक एप्लिकेशन 'int main() {}' है, यदि आप इसे आजमाएं। मानक लाइब्रेरी का उपयोग करने वाली किसी चीज़ के लिए, शायद: # # शामिल करें int main() {std :: cout << std :: endl;} ' – GManNickG

+0

हाँ, लेकिन मुझे कुछ ऐसा आउटपुट चाहिए जो कुछ आउटपुट को थप्पड़ मारता है और गायब होने से पहले रोका जाता है। –

+0

इसके लायक होने के लिए, सबसे छोटा * मानक * एप्लिकेशन int मुख्य() {वापसी 0;} – gregschlom

उत्तर

10

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

XP मशीन पर Microsoft Visual C++ 2008 SP1 Redistributable Pack स्थापित करने का प्रयास करें - आपको सबसे अधिक संभावना है कि आपका प्रोग्राम किसी भी बदलाव के बिना काम करता है।

+1

इसके अलावा, एक स्थिर रूप से जुड़े रनटाइम में बदलने का विकल्प अच्छी तरह से काम कर सकता है। –

+1

या, वैकल्पिक रूप से, स्थिर रनटाइम लाइब्रेरीज़ के साथ संकलित करें: "प्रोजेक्ट प्रॉपर्टीज -> सी/सी ++ -> कोड जेनरेशन -> रनटाइम लाइब्रेरी" पर जाएं, और नाम में "डीएलएल" के बिना विकल्प चुनें। –

+0

स्वीकृत: यह सही है। –

3

माइकल का जवाब बताता है कि यह आपके लिए क्यों काम नहीं करता है, और इसके बारे में आपको क्या करना चाहिए। WINVER के संबंध में - वे आपकी बाइनरी के बारे में कुछ भी नहीं समझते हैं कि यह अचानक एक्सपी पर काम करना शुरू कर देगा। वे क्या करते हैं विंडोज हेडर फ़ाइलों में अक्षम फ़ंक्शन और टाइप घोषणाएं जो WINVER द्वारा निर्दिष्ट ओएस संस्करण पर समर्थित नहीं हैं। यह सुनिश्चित करता है कि आप गलती से उदा। कुछ विस्टा-केवल फ़ंक्शन। हालांकि, आप सख्ती से की आवश्यकता नहीं है यह - यदि आपका कोड किसी भी Vista/7-only कार्यक्षमता पर भरोसा नहीं करता है, तो आप WINVER को फिर से परिभाषित किए बिना संकलित कर सकते हैं, और यह अभी भी XP पर ठीक काम करेगा।

3

बस प्रोजेक्ट सेटिंग्स (परियोजना -> गुण -> कॉन्फ़िगरेशन गुण -> सी/सी ++ -> कोड जनरेशन -> "रनटाइम लाइब्रेरी" को बदलें/एमटी या/एमटीडी के बजाय स्थिर लिंकिंग का उपयोग करने के लिए कंपाइलर सेट करें डिफ़ॉल्ट/एमडी या/एमडीडी)

+0

मेरे लिए पूरी तरह से काम करता है! – Dibsyhex

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