2009-05-07 18 views
6

मुझे विश्वविद्यालय के लिए एक छोटा कार्यक्रम लिखना होगा। समस्या यह है कि इसे लिनक्स के तहत सी/सी ++ में होना चाहिए, और मैंने कभी भी लिनक्स का उपयोग नहीं किया है, मुझे उम्मीद है कि आईडीई, संकलन और उसके साथ बहुत सी समस्याएं हैं।क्रॉस प्लेटफार्म प्रोग्रामिंग

क्या यह विंडोज़ के तहत कोड करना संभव है और फिर कोड को कॉपी/पेस्ट करें और इसे लिनक्स के तहत संकलित करें? मुझे क्या सीमाएं हैं, इसके बारे में मुझे क्या पता होना चाहिए?

यह सॉकेट का उपयोग करके एक छोटा सा प्रोग्राम, विशिष्ट ग्राहक/सर्वर संचार होगा।

+0

यदि आपने विंडोज एपीआई का उपयोग किया है, तो वे मोनो के तहत काम कर सकते हैं, और अन्यथा काम नहीं करेंगे ... एक क्रॉस-प्लेटफार्म ढांचे को लिखना (जैसा कि कॉनराड सुझाव देता है) शायद एक अच्छा विचार है। – dmckee

+2

यह सी/सी ++ में नहीं हो सकता है, क्योंकि ऐसी कोई भाषा नहीं है। यह सी में हो सकता है, या सी ++ में, या सी और सी ++ दोनों को गठबंधन कर सकता है। –

+0

@ डैनियल, मुझे नहीं पता कि आपकी टिप्पणी गंभीर है या मजाक है, लेकिन अगर मैं स्पष्ट करता हूं, तो मेरा मतलब है सी * या * सी ++ – juan

उत्तर

26

मुझे लगता है कि आप आगे जाना है और लिनक्स के तहत यह क्या करना चाहिए पर एक नज़र डालें (जीसीसी?)। यह आपको 'पुराने स्कूल' प्रोग्रामिंग के बारे में कुछ सामान सिखाएगा। आईडीई का उपयोग करने के बारे में भूल जाओ, विम का उपयोग करें (यदि आप इसे पहले से प्राप्त करते हैं) या nedit (नोटपैड की तरह अधिक)।

कमांड लाइन पर संकलित करें। इसे स्वयं लिंक करें। ऐसा करने के लिए एक मेक फ़ाइल लिखें।

यह मूल बातें है। आईडीई का उपयोग करने से पहले आपको इसे समझने की जरूरत है। यह अभी भी विश्वविद्यालय में होने पर ऐसा करें, क्योंकि यह दर्द है और आप असली काम के लिए आईडीई का उपयोग करना चाहते हैं (और चाहिए)!

इसके अलावा, यूनिक्स की मूल समझ हासिल करना मुश्किल नहीं है (मुझे विंडोज पृष्ठभूमि से आने वाले सोलारिस, उबंटू और ओएस एक्स के आसपास अपना रास्ता मिल गया है) - कुछ सरल ट्यूटोरियल आपको उठाने और चलने चाहिए। छोटी स्कूल परियोजनाओं को लिखने के लिए, आपको बहुत कुछ जानने की आवश्यकता नहीं है: cd, ls, mkdir, make, gcc (सी ++ परियोजनाओं के लिए g++ का उपयोग करना सुनिश्चित करें - जिसने मुझे पहले मेरे मैक पर काट दिया है ...)। अपनी होम निर्देशिका के करीब रहें (~)।

लक्ष्य प्रणाली पर अपनी परियोजना को करने से आपको कुछ सामान ठीक करने में मदद मिलेगी: इन सरल सॉकेट और pthreads उदाहरणों को करते समय, मुझे संकलन और उन्हें गैर-प्लेटफार्म पोर्टेबल होने के लिए जोड़ना पड़ा। कुछ प्रणालियों पर, पुस्तकालयों में जोड़ने से इस तरह से दूसरों को इस तरह से किया जाना चाहिए।

BTW: तुम सच में करते हैं Windows के तहत ऐसा करना चाहते हैं, आपका सर्वश्रेष्ठ दांव Windows के तहत एक POSIX वातावरण है। यदि मुझे सही याद है तो पॉज़िक्स सॉकेट विंडोज नेटवर्किंग मॉडल से अलग हैं।

या तो MinGW या Cygwin आज़माएं। दोनों आपको विंडोज के तहत * निक्स विकास पर्यावरण देना चाहिए। आप अपने पसंदीदा पाठ संपादक का उपयोग कर सकते हैं और संकलक :)

संपादित शुरू करने के लिए पार्टी के बजाय cmd.exe (vim की एक Windows बंदरगाह?): क्षमा करें, अगर स्वर टकराव है (टिप्पणी के अनुसार)। मैं इसे थोड़ा नरम करने की कोशिश करूंगा। यह बस है ... मैंने आईडीई के साथ सी/सी ++ (या उस मामले के लिए जावा) सीखने की कोशिश कर रहे कुछ लोगों को देखा है और यह विश्वास करने आया है कि वे शुरू करने के रास्ते में आते हैं। निश्चित रूप से, आपको वास्तविक जीवन कार्यक्रमों के लिए बेहतर टूल की आवश्यकता होगी, लेकिन स्कूल नमूना परियोजनाओं के लिए प्रोजेक्ट फाइलों का ओवरहेड अव्यवस्था जोड़ता है। यह आपके शिक्षक को आपके होमवर्क को ईमेल करना मुश्किल बनाता है - .c और .h फ़ाइलों के समूह के साथ एक ज़िप और एक मेकफ़ाइल वास्तव में उतना आसान है जितना यह हो जाता है ...

+2

आपका स्वर थोड़ा टकराव है, लेकिन मैं आपके बयान से सहमत हूं।किसी दिए गए माहौल में प्रोग्राम करने का तरीका सीखने का सबसे अच्छा तरीका है सही में कूदना। +1 –

+5

यूनिक्स वे (टीएम) (मॉड्यूलो एस/विम/एमएक्स/जी कोर्स) को झुकाव के लिए यह अच्छी सलाह है, लेकिन काम पूरा हो गया, वह शायद ग्रहण या कुछ का उपयोग कर बेहतर है। – dmckee

+0

सलाह के लिए धन्यवाद, लेकिन मुझे नहीं लगता कि मैं कभी भी लिनक्स का फिर से उपयोग करूंगा ... मेरे पास पहले से ही मेरी नोटबुक पर वर्चुअल मशीन पर एक उबंटू छवि है, लेकिन "मूलभूत सामग्री नहीं ढूंढने" का ऊपरी भाग मुझे पागल कर रहा है – juan

5
+1

मुझे लगता है कि क्यूटी एक छोटी विश्वविद्यालय परियोजना के लिए एक ओवरकिल का थोड़ा सा हो सकता है। – nstehr

+1

नहीं, क्यूटी काफी आसान है, और उसे वाणिज्यिक लाइसेंस की आवश्यकता नहीं होगी। – MSalters

8

यदि आपको कोडिंग करने की आवश्यकता है विंडोज़, मैं विकास पर्यावरण के रूप में mingw/msys का उपयोग करने की सलाह दूंगा। Msys विंडोज़ पर एक यूनिक्स-जैसे खोल लागू करता है, और मिंगव gnu compiler collection (gcc) का एक बंदरगाह और विंडोज़ प्लेटफॉर्म पर अन्य gnu बिल्ड टूल्स है। यह एक ओपन-सोर्स प्रोजेक्ट है, और कार्य के लिए उपयुक्त है।

इंस्टॉल प्रक्रिया थोड़ा मुश्किल हो सकती है, लेकिन मैंने पाया कि शुरू करने के लिए सबसे अच्छी जगह here है।

+0

धन्यवाद, मैं इसे देखता हूं – juan

7

तकनीकी रूप से, आप बहुत सारे कोड लिख सकते हैं जो विंडोज़ और लिनक्स प्लेटफ़ॉर्म में बहुत कम परिवर्तनों के साथ काम करेंगे।

हालांकि, कुछ मामलों में चीजें मुश्किल हो जाती हैं। लिनक्स -> विंडोज़ से विंडोज़>> लिनक्स से जाना अक्सर आसान होता है, क्योंकि विंडोज उपयोगकर्ता विंडोज एपीआई कॉल का उपयोग करते हैं जिनके पास लिनक्स समकक्ष नहीं होते हैं।

यदि आप एक जीयूआई का उपयोग करने जा रहे हैं, तो आप एक क्रॉस प्लेटफार्म जीयूआई का उपयोग करने की कोशिश करना चाहेंगे। क्यूटी या WxWidgets अच्छे विकल्प हैं। क्यूटी, विशेष रूप से, कई क्रॉस प्लेटफार्म उपयोगिता कक्षाएं भी होती हैं जो जीयूआई स्पेस के बाहर आती हैं, और सॉकेट के मुद्दों में मदद कर सकती हैं।

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

किसी लिनक्स आईडीई के लिए - किसी बिंदु पर, कूदने और लिनक्स टूल का उपयोग करने की योजना - आपको एक अलग बिल्ड सिस्टम की आवश्यकता होगी (जब तक कि आप सेमेक या स्कॉन्स जैसे क्रॉस प्लेटफ़ॉर्म समाधान का उपयोग न करें), अलग-अलग आईडीई होंगे यदि आप आईडीई का उपयोग करते हैं, आदि

KDevelop एक अच्छा आईडीई है जो कमांड लाइन से सबकुछ करने की कोशिश करने से अधिक परिचित होगा, यदि आप एक एकीकृत आईडीई में काम करने के लिए उपयोग करते हैं।

+0

बहुत सारी लिनक्स ओएसएस परियोजनाएं पॉज़िक्स-इस्म्स से भरे हुए हैं जिनके पास सिगविन जैसी चीजों के बाहर विंडोज़ पर कोई उचित समतुल्य नहीं है। क्रॉस प्लेटफार्म एकल प्लेटफार्म कोडिंग से बस कठिन है क्योंकि आपको पोर्टेबिलिटी गॉथस को जाना है जैसा कि आप जाते हैं। – RBerteig

3

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

लिनक्स (उबंटू विशेष रूप से) वास्तव में उपयोग करना मुश्किल नहीं है, लेकिन विकास के लिए वास्तविक आईडीई की कमी आम तौर पर लोगों को फेंक देती है। मैं अनुशंसा करता हूं कि आप विंडोज़ के लिए सिग्विन का उपयोग करके संकलित करें, और जब आप ऐसा करते हैं तो कोडब्लॉक नामक एक कोड संपादक को आज़माएं। सिग्विन विंडोज़ के बजाए लिनक्स पुस्तकालयों के खिलाफ आपके कोड को संकलित करेगा (और फिर जब आप इसे चलाते हैं तो विंडोज़ डीडीएल का उपयोग करके उन पुस्तकालयों का अनुकरण करें) तो यह आपकी सीमाओं से परिचित होने का एक अच्छा तरीका है। आपको विंडोज़ के तहत कोडब्लॉक प्रोजेक्ट सेट अप करने में सक्षम होना चाहिए, और उसके बाद कोडब्लॉक्स के लिनक्स संस्करण के तहत उसी प्रोजेक्ट को खोलें और अपनी संकलन का परीक्षण करें।

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

+1

वह एक्लिप्स सीडीटी का भी उपयोग कर सकता था। –

+0

ओह, अच्छी कॉल। मैं भूल रहा हूं कि ग्रहण न केवल जावा के लिए है।^_^ –

1

यदि आप सी/सी ++ मानकों से चिपके रहते हैं, तो आपको विंडोज़ से यूनिक्स तक अच्छी तरह से लिखित कोड को पोर्ट करने में कोई समस्या नहीं होनी चाहिए, जिसमें हेडर और कुछ जैसे कुछ मामूली tweaking के साथ।

मुझे लगता है कि लिनक्स के तहत क्लाइंट/सर्वर असाइनमेंट के बाद से कमांड लाइन के अलावा कोई GUI नहीं है, जो इसे संभव बनाता है। लेकिन बहुत सावधान रहें कि आप यूनिक्स स्टाइल सॉकेट और सी/सी ++ मानकों के साथ चिपके रहते हैं, और किसी भी विंडोज लाइब्रेरी या शॉर्टकट का उपयोग नहीं करते हैं।

4

कट और पेस्ट करने की बजाय, प्लेटफार्म अज्ञात फाइलों और प्लेटफॉर्म विशिष्ट फ़ाइलों में अपनी परियोजना को विभाजित करें और/या कोड को कस्टमाइज़ करने के लिए प्रीप्रोसेसर निर्देशों का उपयोग करें। मेरा अधिकांश काम विंडोज के लिए है, और इसे परिचित उपकरण का उपयोग करके लिनक्स सामान के लिए टेस्ट बेड के रूप में उपयोग करना अच्छा लगता है।

+0

फ़ाइलों को विभाजित करना एक अच्छा विचार है, हालांकि अगर वह क्यूटी या डब्ल्यूएक्सविड्ज के साथ जाने का फैसला करता है, तो प्लेटफॉर्म विशिष्ट नहीं होना चाहिए। –

0

यदि यह विंडोज एपीआई विशिष्ट कोड या गैर-क्रॉस-प्लेटफार्म पुस्तकालयों का उपयोग नहीं करता है, और यदि यह मानक सी ++ है - यदि यह माइक्रोसॉफ्ट कंपाइलर विशिष्ट विशेषताओं का उपयोग नहीं करता है - तो यह क्रॉस प्लेटफॉर्म होना चाहिए और लिनक्स पर काम करना चाहिए।

लिनक्स के साथ प्रदान किए गए कंपाइलर को जीसीसी कहा जाता है। एक विंडोज संस्करण है जिसे MinGW कहा जाता है। लिनक्स पर कोशिश करने से पहले आप इसे आजमा सकते हैं। अगर यह मिनजीडब्ल्यू पर संकलित होता है, तो यह निश्चित रूप से लिनक्स पर संकलित होगा। (समस्या यह है कि जीजीसी के अंतिम संस्करणों के साथ मिनगब्लू अद्यतित नहीं है ...)

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

+1

असल में, कंपाइलर अभी भी जीसीसी है, मिनजीडब्ल्यू एक पर्यावरण है जिसे जीसीसी को चलाने के लिए पोर्ट किया गया है। –

+0

असल में, मिनजीडब्ल्यू जीसीसी का वितरण, साथ ही लोगों की टीम जो यह सुनिश्चित करता है कि जीसीसी कंपाइलर्स और संबंधित उपकरण हो सकते हैं खिड़कियों के मूल बाइनरी के रूप में बनाया गया और खिड़कियों के मूल बाइनरी का उत्पादन। वे मौजूदा MSVCRT.DLL सी रनटाइम लाइब्रेरी का लाभ उठाते हैं जो libc और libm प्रदान करने के लिए सिस्टम घटक के रूप में जहाजों को प्रदान करता है, और विंडोज एपीआई के लिए स्वतंत्र रूप से लिखित, जीपीएल-संगत हेडर फाइलें प्रदान करता है। जीसीसी के मिनजीडब्ल्यू वितरण के साथ संकलित कार्यक्रम देशी निष्पादन योग्य हैं और (आमतौर पर) में कोई अप्रत्याशित रनटाइम निर्भरता नहीं होती है। – RBerteig

4

पहले: Cygwin स्थापित करते हैं, इस यूनिक्स POSIX एपीआई कि Mingw प्रदान नहीं करता है, उदाहरण के fork() के लिए साथ खिड़कियों के लिए पर्यावरण की तरह प्रदान करता है। तो आप विंडोज़ में काम करने और लिनक्स में महसूस करने में सक्षम होंगे।

दूसरा: मैं लिनक्स/यूनिक्स पर्यावरण के लिए उपयोग करने का सुझाव देता हूं, लिनक्स/यूनिक्स पर्यावरण को जानना विश्वविद्यालय में आपका जीवन (और न केवल वहां) बहुत आसान होगा।

2

विंडोज और यूनिक्स-स्टाइल प्लेटफार्म दोनों Berkeley Sockets एपीआई प्रदान करते हैं, लेकिन विंडोज कार्यान्वयन में कुछ अंतर हैं, उदा। WSAStartup() और WSACleanup() फ़ंक्शंस का उपयोग। इसके अलावा, कुछ #ifdef एस और एप्लिकेशन बिना किसी समस्या के दोनों प्लेटफ़ॉर्म पर संकलित होगा। मान लीजिए कि यह निश्चित रूप से एक सरल कमांड लाइन ऐप होना चाहिए। एमएसडीएन पर एक अनुभाग Porting Socket Applications to Winsock है। आपको बस पीछे की ओर काम करना है। ;)

सॉकेट प्रोग्रामिंग पर एक पुस्तक भी पढ़ें, उदाहरण के लिए Beej's Guide to Network Programming

एक और विकल्प Boost::Asio का उपयोग करना है। यह किसी भी सॉकेट एपीआई मतभेदों को बहुत आसानी से छुपाता है।

1

जुआन,

तुम सिर्फ लिनक्स आगे बढ़ने का तरीका सीखने पागल जा रहे हैं, तो आप धैर्य आवश्यक एक प्रोग्रामर होने की जरूरत नहीं है। कोडिंग ग्लैमर नहीं है, इसके लिए घंटों के लिए एक डीबगर पर घूरने, सावधानीपूर्वक प्रयास, दस्तावेज़ीकरण पढ़ने, चीजों को आजमाने की आवश्यकता है।

आपको या तो प्रोग्रामिंग या बकल में शामिल होने पर पुनर्विचार करना होगा और लिनक्स पर नेविगेट करना सीखने के प्रयास में डालना होगा, जो कहीं भी उपयोगी प्रोग्रामिंग भाषा के रूप में जटिल नहीं है।

+3

हम्म, मैं सहमत नहीं हूं। यह सिर्फ मेरे समय को अनुकूलित करने और प्राथमिकता देने का मामला है, यह रवैया या "नफरत लिनक्स" का मामला नहीं है, यह विश्वविद्यालय पाठ्यक्रम के लिए एक छोटा सा कार्यक्रम है ... मेरे पास पहले से ही पूर्णकालिक नौकरी प्रोग्रामिंग, गर्भवती पत्नी और कई अन्य हैं जिन विषयों को मैं ले रहा हूं =) लेकिन – juan

+4

सलाह के लिए धन्यवाद, मैं बेन के "आप इसके लिए कट नहीं हैं" मूल्यांकन से सहमत नहीं हूं, लेकिन लिनक्स सीखना निश्चित रूप से लंबे समय तक प्रयास के लायक है। कोशिश करते रहो! – Parappa

2

मैं दूसरों से सहमत हूं कि यदि आप उबंटू लिनक्स की तरह कुछ स्थापित करते हैं, तो सीखना मुश्किल नहीं है। लेकिन अपने वास्तविक प्रश्न का उत्तर देने के लिए, मुख्य मुद्दा विंडोज एपीआई का अनजाने में उपयोग करना टालना है। इसके लिए मेरा पसंदीदा वातावरण AT & टी U/Win टूलसेट है, जो विंडोज़ पर POSIX ऐप्स को संकलित करने के लिए डिज़ाइन किया गया है। ऐसा लगता है कि डेवलपर्स से मिंगव की तुलना में कम शिकायतें उत्पन्न होती हैं, जो बदले में साइगविन की तुलना में कम शिकायतें उत्पन्न करती हैं।

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