2012-03-19 13 views
6

से लाइब्रेरी (.cma) हस्ताक्षर की जांच करें कहें कि मेरे पास ओसीएमएल लाइब्रेरी फ़ाइल foo.cma है। क्या कार्यों के हस्ताक्षर और वहां परिभाषित अन्य प्रकारों के हस्ताक्षर मुद्रित करने के लिए कोई कमांड लाइन उपकरण है? ओकम्ब्रोसर उपयोगिता विंडोज-आधारित प्रतीत होती है ($ DISPLAY पर्यावरण चर के बारे में शिकायत)। उपयोग के मामले है कि मैं एक कर रहा हूँ है:कंसोल

ocamlc -c foo.cma main.ml 

और मिलती है:

File "main.ml", line 13, characters 33-47: 
Error: Unbound value ListUtil.split 

ListUtil.split foo.cma में रहते हैं चाहिए, लेकिन मैं सत्यापित करने के लिए एक सांत्वना-आधारित उपकरण पता नहीं है यह।

उत्तर

9

Debian/Ubuntu पर, आपके पास "ocamlobjinfo":

ocamlobjinfo stdlib.cma 

प्रदर्शित करेगा सभी इकाई नाम stdlib.cma में शामिल थे। फिर, आप एक छोटी फ़ाइल बना सकते हैं:

include SomeModule 

और मॉड्यूल कुछ मॉड्यूल में परिभाषित किया गया है यह देखने के लिए इसे संकलित करें।

5

उच्चस्तरीय में, मैं सिर्फ सीएमए फ़ाइल लोड:

module Chunk = Foo;; 
+0

हाँ, यह उपयोगी है, हालांकि यह मानता है कि सीएमए फ़ाइल में संकलित मॉड्यूल के नामों को जानता है। उदाहरण के लिए, यदि मेरे पास दो अलग-अलग मॉड्यूल के साथ फ़ाइल foo.cma है, तो foo1 और foo2 कहें, जैसे संकलित: 'ocamlc -a foo1.cmo foo2.cmo -o foo.cma' तो क्या कोई प्राप्त करने का कोई तरीका है .cma फ़ाइल में पाए गए सभी मॉड्यूल की सूची या क्या किसी को पहले से नाम पता होना चाहिए? किसी भी मामले में अजीब लगता है कि एक कंसोल उपयोगिता बॉक्स से बाहर नहीं प्रदान की जाती है। –

+0

अपूर्ण विधि के साथ, आप सीएमए फ़ाइल में सभी मॉड्यूल देख सकते हैं। मॉड्यूल को अग्रिम में जानने के लिए, आपको स्रोत फ़ाइल में mli फ़ाइल या यदि नहीं है, तो जांचना होगा। अन्यथा, मुझे नहीं पता कि वास्तव में यह कैसे करना है। – cago

2

आदेश में कोड ListUtil.split संदर्भित संकलित करने के लिए:

#load "foo.cma";; 

तब मैं सिर्फ हस्ताक्षर देखने के लिए एक मॉड्यूल को फिर से परिभाषित कंपाइलर को listUtil.cmi फ़ाइल को खोजने की आवश्यकता है। उस कोड कंपाइलर को जोड़ने के लिए कार्यान्वयन वाली सीएमए (या सीएमओ) फ़ाइल की आवश्यकता होगी। कुछ स्पष्टीकरण के लिए http://mirror.ocamlcore.org/caml.inria.fr/pub/ml-archives/caml-list/2008/09/2bc9b38171177af5dc0d832a365d290d.en.html देखें।