2010-05-02 6 views
9

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

मैं लिनक्स अनुप्रयोग विकास में कुल नवागत हूं (और शायद ही कभी ओएस का उपयोग करता हूं)।

तो, आज, मैंने उबंटू 10.04 एलटीएस (वुबी के माध्यम से) स्थापित किया और मेरे मुख्य हथियार के रूप में जी ++ कंपाइलर के साथ कोड :: ब्लॉक को सुसज्जित किया। तब मैंने अपना पहला हैलो वर्ल्ड लिनक्स प्रोग्राम संकलित किया, और मैं आउटपुट प्रोग्राम के बारे में उलझन में आया।

मैं कोड :: ब्लॉक में "बिल्ड और रन" मेनू विकल्प के माध्यम से अपना प्रोग्राम चला सकता हूं, लेकिन जब मैंने फ़ाइल ब्राउज़र के माध्यम से संकलित अनुप्रयोग को लॉन्च करने का प्रयास किया (/ मीडिया/MyNTFSPartition/MyProject/bin/release में ; हाँ, मैंने इसे अपने एनटीएफएस विभाजन में सहेजा), कार्यक्रम नहीं दिखाया गया था।

क्यों? मैं विचार से बाहर भाग गया।

मुझे अपना Windows और Microsoft Visual Studio मानसिकता Linux और Code::Blocks मानसिकता बदलने की आवश्यकता है।

तो मैं इन सवालों के साथ आया था:

  1. मैं कैसे (आईडीई के बाहर) बाहर से मेरी संकलित linux कार्यक्रमों पर अमल कर सकते हैं?
    • Windows में, मैं बस उत्पन्न निष्पादन योग्य (.exe) को चलाने के लिए फ़ाइल
  2. मैं अपने लिनक्स आवेदन कैसे वितरित कर सकते हैं?
    • Windows में, मैं तो केवल संगत DLL फ़ाइलों के साथ निष्पादन योग्य फ़ाइलों (यदि हो तो)
  3. लिनक्स और में libs (स्थिर पुस्तकालय) और DLLs (गतिशील पुस्तकालय) के समकक्ष कैसे क्या है वितरित उन्हें इस्तेमाल करें?
    • विंडोज/विजुअल स्टूडियो में, मैं बस परियोजना सेटिंग्स में अतिरिक्त निर्भरताओं के लिए आवश्यक पुस्तकालय जोड़ता हूं, और मेरा प्रोग्राम स्वचालित रूप से आवश्यक स्थिर पुस्तकालय (-ies)/डीएलएल से लिंक होगा।
  4. क्या सी ++ लाइब्रेरी (यदि प्रदान किया गया है) के "बाइनरी फॉर्म" का उपयोग करना संभव है तो मुझे पूरे लाइब्रेरी स्रोत कोड को पुन: संकलित करने की आवश्यकता नहीं होगी?
    • विंडोज़ में, हाँ। कभी-कभी precompiled * .lib फ़ाइलें प्रदान की जाती हैं।
  5. यदि मैं लिनक्स में एक WxWidgets एप्लिकेशन बनाना चाहता हूं, तो मुझे उबंटू के लिए कौन सा पैकेज चुनना चाहिए? wxGTK या wxX11? क्या मैं एक्स 11 के तहत wxGTK प्रोग्राम चला सकता हूं?
    • विंडोज़ में, मैं wxMSW का उपयोग करता हूं, बेशक।
  6. यदि प्रश्न संख्या। 4 उत्तर दिया गया है, precompiled wxX11/wxGTK लाइब्रेरी मौजूद है? गहरी गूगल खोज की कोशिश नहीं की है।
    • विंडोज़ में, "wxPack" (http://wxpack.sourceforge.net/) नामक एक प्रोजेक्ट है जो मेरा बहुत समय बचाता है।

कई सवाल पूछने के लिए क्षमा करें, लेकिन मैं वास्तव में इन linux विकास बुनियादी बातों पर उलझन में हूँ।

मदद किसी भी तरह का सराहना की जाएगी =)

धन्यवाद।

+7

शुभकामनाएं। मैं वर्षों से लिनक्स चला गया, लेकिन विकास के लिए विंडोज़ को दोहरी बूट किया गया, क्योंकि लिनक्स के लिए उपकरण पत्थर की उम्र की तरह लगते हैं। अब मैं बस हर समय विंडोज का उपयोग करता हूं ... – rlbond

+2

यह बेहतर पूछा जाएगा क्योंकि कई प्रश्न और उनमें से कुछ (जैसे लाइब्रेरी समतुल्य) निश्चित रूप से पहले पूछे गए हैं। –

+1

मुझे लगता है कि आप क्यूटी लाइब्रेरी और क्यूटी क्रिएटर आईडीई के साथ बहुत बेहतर होंगे। –

उत्तर

16

मैं अपने संकलित लिनक्स बाहरी रूप से प्रोग्राम (आईडीई के बाहर) कैसे निष्पादित कर सकता हूं? Windows में, मैं बस उत्पन्न निष्पादन योग्य (.exe) फ़ाइल

लिनक्स पर आप भी ऐसा ही चलाते हैं।

./myapp 

आप पथ

PATH=".:$PATH" 

तो खिड़कियों की तरह जिस तरह से

करने के लिए वर्तमान dir जोड़ते हैं: फर्क सिर्फ इतना है कि लिनक्स पर वर्तमान निर्देशिका, पथ में नहीं डिफ़ॉल्ट रूप से है तो आम तौर पर आप क्या करते हैं
myapp 

करेगा, लेकिन कम से कम साझा वातावरण में सुरक्षा जोखिमों के कारण इसकी अनुशंसा नहीं की जाती है (आप किसी के द्वारा बाएं/tmp/ls को नहीं चलाना चाहते हैं)।

मैं अपने लिनक्स एप्लिकेशन को कैसे वितरित कर सकता हूं? Windows में, मैं बस निष्पादन योग्य फ़ाइलों इसी DLL फ़ाइलों के साथ (यदि हो तो) वितरित

आप वितरित करने के बारे में गंभीर हैं, तो आप शायद .deb के बारे में सीखना चाहिए (Ubuntu, डेबियन) और .rpm (RedHat, सेंटोस, एसयूएसई)।वे "पैकेज" हैं जो उपयोगकर्ता को वितरण-विशिष्ट तरीके से एप्लिकेशन इंस्टॉल करना आसान बनाता है।

कुछ इंस्टॉलर प्रोजेक्ट भी हैं जो विंडोज इंस्टालर जेनरेटर के समान काम करते हैं, लेकिन मैं पहले पूर्व पथ का अध्ययन करने की सलाह देता हूं।

लिनक्स में एलआईबी (स्थिर पुस्तकालय) और डीएलएल (गतिशील पुस्तकालय) के बराबर क्या है और उनका उपयोग कैसे करें?

। ए (स्थिर) और .so (गतिशील)। आप जीसीसी-विशिष्ट संकलन विकल्पों का उपयोग करते हुए, विंडोज़ पर उतनी ही कम तरीके से उनका उपयोग करते हैं। मैं कोड :: ब्लॉक का उपयोग नहीं करता इसलिए मुझे नहीं पता कि उनके संवाद कैसा दिखते हैं, अंत में यह लिंकिंग विकल्पों में -llibrary जोड़ने के बारे में है (अनुमान लगाएं: विंडोज़ पर यह/llibrary जोड़ने के बारे में है ;-))

क्या सी ++ लाइब्रेरी (यदि प्रदान किया गया है) के "बाइनरी फॉर्म" का उपयोग करना संभव है तो मुझे पूरे लाइब्रेरी स्रोत कोड को पुन: संकलित करने की आवश्यकता नहीं होगी?

हां। और वितरण में बहुत सारे पुस्तकालय पहले से मौजूद हैं।

ध्यान दें कि यदि आप वितरण के लिए .deb और .rpm का उपयोग करते हैं, तो आप कह सकते हैं "मेरे ऐप को ऐसे और ऐसे पुस्तकालय स्थापित करने की आवश्यकता है" और वे वितरण अभिलेखागार से स्थापित किए जाएंगे। और यह अनुशंसित तरीका है, सामान्य रूप से आपको पुस्तकालयों की अपनी प्रति वितरित नहीं करना चाहिए।

यदि मैं लिनक्स में एक WxWidgets एप्लिकेशन बनाना चाहता हूं, तो मुझे उबंटू के लिए कौन सा पैकेज चुनना चाहिए? wxGTK या wxX11? क्या मैं एक्स 11 के तहत wxGTK प्रोग्राम चला सकता हूं?

पहले wxGTK प्रयास करें, संवाद बेहतर लग सकते हैं, GNOME विषयों इस्तेमाल किया जाना चाहिए आदि

तो सवाल नहीं। 4 उत्तर दिया गया है, precompiled wxX11/wxGTK लाइब्रेरी मौजूद है? गहरी गूगल खोज की कोशिश नहीं की है।

(wx के लिए खोज या अपने Ubuntu सॉफ्टवेयर केंद्र अंडे और)

संक्षेप में प्रयास करें

apt-cache search wx 

: आप सब कुछ आप वितरण अभिलेखागार में जरूरत मिल जाएगा।

+0

यदि मैं कर सकता था, तो मैं पुस्तकालयों के लिए संकुल में निर्भरता जानकारी का उपयोग करने के बारे में बिंदु के लिए, दो बार +1 कर दूंगा। – harms

+0

@harms - आपके लिए यह तय किया गया है। –

+1

मैं दृढ़ता से आपको जोड़ने के खिलाफ सावधानी बरतता हूं पाथ के लिए वर्तमान निर्देशिका। हालांकि यह केवल वास्तव में एक बहुत ही खराब सुरक्षा समस्या है यदि यह रूट [क्रिंग] के रूप में किया जाता है, तो यह निश्चित रूप से केवल एक उपयोगकर्ता के लिए पर्याप्त खतरनाक हो सकता है, या कम से कम कुछ अजीब अप्रत्याशित व्यवहार का कारण बन सकता है। विशेष रूप से सच अगर आप जैसा कि आप सुझाव देते हैं इसे पूर्ववत करें; पहले से इंस्टॉल किए गए कुछ को ओवरराइड करना बहुत दुर्लभ है, और शायद आप इसे जोड़ना चाहते हैं ('PATH =" $ PATH:। "') यदि आप वास्तव में इसे वास्तव में चाहते हैं। – Cascabel

3
  1. नेविगेट अपने संकलित कार्यक्रम के साथ फ़ोल्डर में और निष्पादित ./program
  2. कार्यक्रम भेजें, प्लस किसी भी .so फ़ाइलों
  3. .a स्थिर पुस्तकालय, .so साझा किया जाता है पुस्तकालयों है।
  4. हां, लेकिन अक्सर आपको पहले इसे संकलित करने की आवश्यकता होती है।

हालांकि WxWidgets वितरण के बारे में निश्चित नहीं है।

0

1, यूनिक्स में आमतौर पर निष्पादन योग्य के लिए कोई विशेष एक्सटेंशन नहीं होता है - इसलिए myprog.exe सिर्फ myprog होगा। यदि आपको आईडीई स्वचालित रूप से ऐसा नहीं करता है, तो आपको इसे निष्पादन योग्य सेट करना पड़ सकता है, "chmod + x myprog" टाइप करें

5, wxWindows के लिए मैं स्रोत डाउनलोड करूँगा और इसे बनाउंगा, बिल्ड निर्देशों की जांच करें लेकिन यह है शायद बस "कॉन्फ़िगर करें; बनाना; इंस्टॉल करें" का मामला। आम तौर पर यूनिक्स में आप libs फॉर्म स्रोत बनाते हैं ताकि वे आपकी मशीन पर सभी घटकों को सही तरीके से ढूंढ सकें - आपके पास उदाहरणों का स्रोत भी है।

0

मैंने अभी कुछ जानकारी आरएलबीओडी के उत्तर में जोड़ दी है।

  1. यह लिनक्स संस्करण पर निर्भर करता है। यदि आप उबंटू का उपयोग करते हैं - एक डेब-पैकेज बनाएं। (http://ubuntuforums.org/showthread.php?t=51003)

मैं X11 के तहत wxGTK कार्यक्रम चलाने कर सकते हैं?

हाँ, wxGTK पैकेज स्थापित अगर आपके पास :)

1

नहीं क्यों सिर्फ तुम क्या जानते हैं और .NET में विकसित के साथ चिपके रहते हैं? उबंटू मोनो के साथ मूल आता है। आप विजुअल सी ++ का उपयोग कर सकते हैं या सी # तक कदम उठा सकते हैं और अपना जीवन एक बहुत आसान बना सकते हैं।

0

यह वास्तव में आपके प्रश्नों का उत्तर देने वाला नहीं है, लेकिन मुझे लगता है कि एक वैध सिफारिश है।

  1. Linux वातावरण:
    आप दो मुद्दों आप के साथ सौदा करने की कोशिश कर रहे हैं।
  2. यह सुनिश्चित करना कि आपका प्रोग्राम पोर्टेबल है।

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

एक बार जब आप ऊपर से संतुष्ट हो जाते हैं तो अपना कोड लें और इसे लिनक्स पर ले जाएं। उस समय किसी भी पोर्टिंग प्रयास तुच्छ होना चाहिए।

2

चूंकि उबंटू wxGTK संकुल के साथ आता है, इसलिए आपको निश्चित रूप से उनके खिलाफ निर्माण करना चाहिए। विकास के लिए आपको एक डीबग संस्करण का उपयोग करना चाहिए, इसलिए स्वयं को बनाने के लिए यह अच्छा हो सकता है, लेकिन संकुल के खिलाफ तैनाती के निर्माण के लिए सिस्टम प्रदान करता है।

wxX11 wxGTK की तुलना में एक खराब विकल्प है, केवल उन सिस्टम के लिए उपयोग करें जहां WxGTK मौजूद नहीं है या उपलब्ध होने से नए जीटीके पुस्तकालयों की आवश्यकता है।

+1

उबंटू पर, लाइब्रेरी पैकेजों को आमतौर पर ' -dev'। - wxGTK 2.8 के लिए 'libwxgtk2.8-dev'। आपको डीबग संस्करण रखने के लिए खुद को संकलित करने की भी आवश्यकता नहीं है - वितरण पुस्तकालयों के लिए डिबगिंग प्रतीक भी पैक किए जाते हैं (उदाहरण के लिए।' libwxgtk2.8 -dbg') – caf

1

लिनक्स नवागंतुकों को सामान्य सलाह का एक टुकड़ा, लेकिन तकनीकी रूप से किसके साथ शुरुआत करने के लिए दिमागी है, यह है: आपको अपने चुने हुए वितरण का सही ढंग से उपयोग करना सीखना चाहिए।

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

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

0

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

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

आप ld.so अर्थात प्रकार

man ld.so 

एक टर्मिनल में के लिए मैनुअल पृष्ठ को पढ़ने के लिए चाहते हो सकता है। यह आपको बताता है कि लिनक्स गतिशील पुस्तकालय लिंकर रन-टाइम पर पुस्तकालयों को कहां देखता है।यह आपको ldd नामक एक और उपयोगी टूल भी संदर्भित करता है, जिसे मैं लिनक्स विकास कर रहे हैं या नहीं, इसके बारे में परिचित होने की सलाह देता हूं।