2010-09-04 17 views
6

मैं वास्तव में डी में अधिक प्राप्त करना चाहता हूं, लेकिन अच्छी लाइब्रेरी समर्थन की कमी वास्तव में मुझे बाधित कर रही है। इसलिए मैं मौजूदा सी पुस्तकालयों के लिए कुछ डी बाइंडिंग बनाना चाहता हूं जिन्हें मैं उपयोग करना चाहता हूं। मैंने कभी बाध्यकारी नहीं किया है, लेकिन यह भी मुश्किल नहीं लग रहा है।मौजूदा सी पुस्तकालयों के लिए बाध्यकारी डी (डी 2)

मैं डी 2 के लिए ऐसा करने की योजना बना रहा हूं (विशेष रूप से डी 1 नहीं, लेकिन यदि यह दोनों के लिए भी बेहतर हो सकता है)। मैं डीएमडी 2 कंपाइलर का उपयोग कर रहा हूं।

  • किन सम्मेलनों का उपयोग किया जाना चाहिए (मैंने संस्करण विवरण, उपनाम और नियमित स्थिरांक/कार्य परिभाषाओं को देखा)?
  • एक स्थिर पुस्तकालय (और इस प्रकार से जुड़ा हुआ) या गतिशील पुस्तकालय के लिए बाध्यकारी के बीच क्या अंतर होगा? बाध्यकारी में कोई अंतर है?
  • एक स्थिर लाइब्रेरी को बाध्य करने के लिए, डीएमडी कंपाइलर .a या .o फ़ाइलों को स्वीकार नहीं करता है, केवल .lib और .obj। क्या इसका मतलब है कि पुस्तकालयों को डीएमसी कंपाइलर (जीसीसी कंपाइलर के विपरीत) के साथ संकलित किया जाना चाहिए, और फिर डीएमडी कंपाइलर के माध्यम से जोड़ा जाना चाहिए?

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

धन्यवाद!

+0

विंडोज़? ______ – kennytm

+0

हां, विंडोज़ (x86)। हालांकि मैं संभवतः चीजों को पोर्टेबल बनाने का लक्ष्य रखता हूं ... –

+0

जिज्ञासा से, आप कौन से पुस्तकालयों को बंदरगाह देखना चाहते हैं? –

उत्तर

4

कुछ नोट करने के लिए चीजें:

  1. डीएमडी और पुराने OMF वस्तु फ़ाइल स्वरूप के साथ अपने लिंकर Optlink काम, नहीं Coff। इसका मतलब यह है कि जिन सी फाइलों के खिलाफ आप लिंक करते हैं उन्हें ओएमएफ भी होना चाहिए। यदि आप डीएमसी का उपयोग नहीं करना चाहते हैं, तो ऐसे उपकरण हैं जो सीओएफएफ को ओएमएफ में परिवर्तित कर देंगे, हालांकि मुझे उनके बारे में विवरण नहीं पता है।

  2. .d फ़ाइलों को .h फ़ाइलों का अनुवाद करने के लिए, एचटीडी नामक उपयोगिता को डीएमडी के साथ पैक किया जाता है, और यदि आप प्रीप्रोसेसर का गंभीर रूप से दुरुपयोग करते हैं तो कुछ हद तक अपूर्ण रूप से यह अनुवाद आपके लिए करेगा। आम तौर पर, आप const, immutable, या enum मेनिफेस्ट स्थिरांक के लिए, version सशर्त संकलन के लिए बयान, और मैक्रो फ़ंक्शंस के लिए नियमित (संभवतः टेम्पलेट) फ़ंक्शन का उपयोग करते हैं।

जहाँ तक उदाहरण के रूप में, एक ही स्थान पर देखने के लिए druntime में हो सकता है, which contains bindings for the entire C standard library.

+0

धन्यवाद। मुझे लगता है कि इंटरफेसिंग अब मेरे लिए काफी स्पष्ट है। तो, एक तरीका ऐसा प्रोजेक्ट बनाना होगा जिसमें सी से इंटरफेस फाइलें और ओएमएफ ऑब्जेक्ट फाइलें हों, और फिर इन्हें एक .lib में संकलित करें? .lib से जुड़ा होगा, और इंटरफ़ेस फ़ाइलों को 'आयात' किया जाएगा। यद्यपि वितरित करना मुश्किल होगा (अधिकांश उपयोगकर्ताओं के लिए पुन: संकलन?), लेकिन उपयोग करने में बहुत आसान है। –

+0

druntime github में स्थानांतरित हो गया, [नया लिंक] (https://github.com/D- प्रोग्रामिंग- भाषा /druntime/tree/master/src/core/stdc)। इसके अलावा आईआईयूसी, [डी के लिए समेकित सी बाइंडिंग प्रोजेक्ट] है (https://github.com/D- प्रोग्रामिंग- लैंगेज/डिडिमोस) अब –

+0

कुछ [ऑफ साइट पर युक्तियाँ] (http://www.dpl.org /htomodule.html) –

1

आप कैसे Aldacron Derelict2 के साथ करता है पर एक नज़र हो सकता है।