2008-09-17 28 views
9

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

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


संपादित

मैं पुस्तकालय है कि मैं जावा की जरूरत का हिस्सा अनुवाद समाप्त हो गया। यह अब तक पुस्तकालय का लगभग 10% है, हालांकि यह शायद समय के साथ बढ़ेगा। सी और जावा बहुत समान हैं, इसलिए इसमें केवल कुछ घंटे लग गए। मुख्य कठिनाई उन त्रुटियों को ठीक कर रही है जो अनुवाद में गलतियों से पेश होती हैं।

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

+0

अपने आवेदन के साथ आगे जाने से पहले [अपाचे कॉमन्स मैथ्स लाइब्रेरी एपीआई दस्तावेज़ीकरण] (http://commons.apache.org/math/api-1.2/index.html) –

उत्तर

5

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

क्या कोई जावा समेकित गणित कार्य नहीं है?

जैसा कि आप स्वयं जेएनआई मार्ग पर टिप्पणी करते हैं, एक सी कंपाइलर के लिए आप शायद 'ब्लडहेड देव-सी ++' का उपयोग कर सकते हैं, लेकिन यह ~ 5000 लाइनों के लिए बहुत प्रयास है।

4

मैं इसे संकलित करता हूं और जेएनए का उपयोग करता हूं।

जेएनए (जावा मूल निवासी) मूल रूप से रनटाइम में करता है जो जेएनआई संकलन समय पर होता है और किसी भी गैर-जावा कोड की आवश्यकता नहीं होती है (अधिक जावा नहीं)।

मुझे आपके मामले में इसके प्रदर्शन या प्रयोज्यता के बारे में पता नहीं है लेकिन मैं इसे आज़मा दूंगा।

+0

मैंने स्पर्श नहीं किया है वर्षों में जावा लेकिन मैंने सोचा कि इसे जेएनआई-जावा मूल इंटरफ़ेस कहा जाता है। अगर वे नाम बदल गए तो मुझे बताएं। –

+1

@ManVsCode आप उस टिप्पणी को हटाना चाहते हैं, यह समझ में नहीं आता है। जवाब दोबारा पढ़ें। –

11

Java GNU Scientific Library प्रोजेक्ट पर मैंने सी पुस्तकालयों के आसपास जेएनआई रैपर कक्षाएं उत्पन्न करने के लिए Swig का उपयोग किया। ग्रेट टूल, और पाइथन सहित कई भाषाओं में रैपर कोड भी उत्पन्न कर सकता है। अत्यधिक सिफारिशित।

System.loadLibrary("mylibrary.dll"); 

सुनिश्चित नहीं हैं कि अगर यह एक शुद्ध सी पुस्तकालय के साथ काम करेंगे लेकिन यह शायद एक शॉट के लायक है:

-2

आप उपयोग करने की कोशिश है। :)

+1

और क्या करने के बजाय? – dmeister

0

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

0

ठीक है, एएमपीसी है। यह विंडोज, मैकोज़ एक्स और लिनक्स के लिए एक सी कंपाइलर है, जो जावा बाइट कोड (कोड की तरह, जो जावा वर्चुअल मशीन पर चलता है) में सी कोड संकलित कर सकता है।

AMPC

हालांकि, यह वाणिज्यिक और लाइसेंस प्रति $ 199 खर्च होता है। मुझे संदेह है कि आपके लिए भुगतान करता है;) मुझे इस तरह के किसी भी मुफ्त कंपाइलर के बारे में पता नहीं है।

ओटीओएच, जावा और सी बहुत समान हैं। आप संभवतः सी कोड को जावा में रीफैक्टर कर सकते हैं (structs को सार्वजनिक आवृत्ति चर के साथ ऑब्जेक्ट्स के साथ प्रतिस्थापित किया जा सकता है) और पॉइंटर ऑपरेशंस का आमतौर पर किसी अन्य चीज़ (उदाहरण के लिए सरणी संचालन) में अनुवाद किया जा सकता है। हालांकि मुझे लगता है कि आप 5000 लाइन कोड के माध्यम से नहीं जाना चाहते हैं, है ना?

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

1

क्या आप वाकई सी लाइब्रेरी का उपयोग करना चाहते हैं, भले ही यह छोटा हो?

एक बार 64 बिट थोड़ा आम हो जाता है, तो आपको लाइब्रेरी के 32 बिट और 64 बिट संस्करणों को भी निर्माण/तैनात करना होगा। और सी कोड की तरह क्या है, इस पर निर्भर करता है कि आपको इसे 64 बिट के रूप में बनाने के लिए कोड को अपडेट करने की आवश्यकता हो सकती है या नहीं।

यदि सी लाइब्रेरी सरल है, तो सी पुस्तकालय को शुद्ध जावा में बंद करना आसान हो सकता है और जेएनआई लाइब्रेरी, सी लाइब्रेरी और जावा कोड को तैनात/तैनाती से निपटना आसान नहीं है।

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

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