2010-09-03 12 views
8

के साथ अकेले संकलन स्टैंड exe मैं साइगविन के साथ एक स्टैंडअलोन exe बनाना चाहता हूँ।साइगविन

  1. Staticly लिंक cygwin1.dll
    मैं स्थिर cygwin1.dll लिंक कर सकते हैं, तो मैं एक स्टैंड-अलोन exe प्राप्त कर सकते हैं: मैं दो विकल्प हैं। myprog.exe
    साथ

  2. मर्ज cygwin1.dll मैं अपने कार्यक्रम के साथ cygwin1.dll विलय कर सकते हैं, मैं एक स्टैंड-अलोन exe प्राप्त कर सकते हैं।

सुझाव नहीं है कि मैं IlMerge का उपयोग करता हूं। यह काम नहीं करेगा क्योंकि मैंने अपने प्रोग्राम को .NET के साथ संकलित नहीं किया था।

क्या इनमें से कोई भी विकल्प संभव है? यदि नहीं, तो क्या इस दुविधा के साथ कुछ भी संभव है? Thanx!

+0

मैं इसे ले कि आप वास्तव में CYGWIN.DLL से सेवाओं की आवश्यकता होती है, और सिर्फ -Mno-cygwin (या MinGW) आप के लिए काम नहीं करेगा का उपयोग कर? – RBerteig

+0

मुझे नहीं पता। मैं जीसीजे का उपयोग कर रहा हूं, लेकिन मुझे जीसीजे नहीं मिला जो काम करने के लिए मिलिंग के साथ आया था। –

उत्तर

3

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

विकल्प source to cygwin को पकड़ना होगा, और इसे एक स्थिर पुस्तकालय के रूप में बनाना होगा। कम से कम सिद्धांत में, यह क्लीनर होना चाहिए - लेकिन यह भी निस्संदेह अधिक काम है। इसे डीएलएल की बजाय पूरी तरह स्थिर कोड के रूप में बनाने के लिए लगभग निश्चित रूप से कुछ काम करना होगा, हालांकि यह अनुमान लगाने में भी मुश्किल है कि कितना मुश्किल है। बस थोड़ी सी ब्राउज़िंग, ऐसा लगता है कि यह कुछ घंटों का त्वरित काम होगा, या ऐसा कुछ भी नहीं होगा (जब तक वहां कुछ ऐसा न हो जो मुझे याद आती है जो पहले से ही इसे स्थिर रूप से निर्माण करने का समर्थन करती है)।

3

-mno-cygwin को एक कंपाइलर और लिंकर ध्वज के रूप में पास करने का प्रयास करें। यदि आपके कार्यक्रम की आवश्यकताएं काफी सरल हैं तो यह सिग्विन पुस्तकालयों के आधार पर बचना होगा और एक स्टैंडअलोन EXE तैयार करेगा।

+1

अन्य पदों संकेत दिया है कि यह अब और काम नहीं करता है, और हाल ही में पाठकों के लिए। सुविधा अब बहिष्कृत है। – eewanco

1

जैरी का अधिक सटीक उत्तर।

नीचे वर्णित प्रक्रिया को आपके अधिकारों और लाइसेंस कानून से सामना करना चाहिए! मुझे पता है कि यह काम कर सकता है लेकिन परिणाम वितरित करने के अधिकार (या यहां तक ​​कि प्रक्रिया भी कर सकते हैं) सिगविन लाइसेंस द्वारा बाध्य (और मुझे वास्तव में महसूस हो रहा है) हो सकता है। यही कारण है, क्योंकि आपके आवेदन अभी भी Cygwin के पास भेजेगा (भले ही यह बेकार है - लेकिन अपने अनुप्रयोग में अभी भी है)

मान लें hello.exe महान परियोजना निर्देशिका में Cygwin के तहत संकलित अपने महान आवेदन का नाम है C:\xxx\yyy\zzz\

में cygwin सांत्वना C:\xxx\yyy\zzz के पास जाकर टाइप

objdump -p hello.exe | grep "DLL Name" 

आप सभी DLLs अपने आवेदन का उपयोग करता है प्राप्त करते हैं। फिर सूचीबद्ध सभी डीएलएल और साइगविन के लिए विशिष्ट C:\xxx\yyy\zzz कॉपी करें।

ध्यान दें कि आपका एप्लिकेशन अन्य अनुप्रयोगों (उदाहरण के लिए निष्पादन फ़ंक्शन का उपयोग करके) का आह्वान कर सकता है --- पुस्तकालयों के अनुप्रयोगों का उपयोग करें और इस पुस्तकालयों को कॉपी करें और साथ ही साथ इस एप्लिकेशन को कॉपी करें - C:\xxx\yyy\zzz पर।

शायद आपको -L C:\xxx\yyy\zzz या तो प्रकार के विकल्प के साथ अपनी परियोजना को दोबारा जोड़ना होगा।अपने स्रोतों में अन्य सभी पथ देखें।

इस प्रकार आपका एप्लिकेशन सिग्विन इंस्टॉलेशन से स्वतंत्र हो जाता है और आप इसके कार्यक्षमता को ---- सिगविन के बिना अन्य विंडोज उपयोगकर्ताओं के साथ साझा/साझा कर सकते हैं। लेकिन - एक बार मैं आपको इंगित करता हूं और पूछता हूं - सिग्विन रचनाकारों के उचित लाइसेंस और कानून से अवगत रहें और उनका निरीक्षण करें!

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