2009-07-23 17 views
6

मैं एक छोटे से जावा एप्लिकेशन को विंडोज निष्पादन योग्य में संकलित करना चाहता हूं।जीसीजे मेरे आयातित पैकेजों से कक्षाएं क्यों नहीं ढूंढता है?

एप्लिकेशन बहुत छोटा है, केवल एक मुख्य वर्ग है, लेकिन यह अपाचे पीओआई का उपयोग करता है।

जब मैं इसे संकलित करता हूं, तब तक सब ठीक काम करता है, जब तक मैं पीओआई जार को कक्षा पथ तर्क में डालता हूं।

लेकिन जब यह लिंक करने की बात आती है, तो जीसीजे पीओआई पैकेज में कक्षाओं के संदर्भों को हल नहीं कर सकता है। संदेश इस तरह हैं:

undefined reference tp 'org::apache::poi:hssf:usermodel:HSSFWorkbook::class$' 

मेरे आवेदन को जोड़ने के लिए मुझे क्या करना है?

+0

क्या आपने वास्तव में संकलन समय पर कक्षा पथ में इसे जोड़ने के बजाय प्रोजेक्ट के lib फ़ोल्डर में अपाचे पीओआई से जार फ़ाइल शामिल करने की कोशिश की है? – amischiefr

+0

हाँ, वही समस्या। –

+0

सूर्य जेडीके या ओपनजेडीके के साथ प्रयास किया? यदि उनमें से कोई भी काम करता है, तो यह जीसीजे में बस (फिर से) एक बग है। – BalusC

उत्तर

5

आपको आयातित जार को .so पुस्तकालयों को अलग से संकलित करना होगा। अपने कोड को संकलित करते समय पुस्तकालयों को संकलित करते समय, --classpath में जार प्रदान करना सुनिश्चित करें।

एक उदाहरण है, जहां मैं जीएनयू क्रिप्टो पुस्तकालय संकलन कर रहा हूँ:

gcj --classpath=source/:libs/gnu-crypto.jar -fjni -c libs/gnu-crypto.jar -o libs/gnu-crypto.o 
gcj -shared -fPIC -o libs/libgnu-crypto.o libs/gnu-crypto.o -o libs/libgnu-crypto.so 

अंत में, पुस्तकालय पथ को संदर्भित एक खोल स्क्रिप्ट के माध्यम से अपने निष्पादन निष्पादित। उदाहरण के लिए:

#!/bin/sh 
export LD_LIBRARY_PATH=./libs/:$LD_LIBRARY_PATH 
exec ./MyJavaApp $* 
+1

मैंने अभी जीसीजे का उपयोग शुरू किया और यह जवाब बहुत उपयोगी पाया। बस यह ध्यान रखना चाहता था कि पहले-कमांड पर '-एफपीआईसी' की आवश्यकता है और साथ ही मेरे अनुभव से भी। –

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