2011-08-23 23 views
5

मैं जेएनआई के साथ काम कर रहा हूं। मेरे पास एक रैपर लाइब्रेरी (wrapper.so) है जो दो साझा पुस्तकालयों का उपयोग करती है: one.so और two.soसाझा पुस्तकालयों के लिए सापेक्ष पथ

सब कुछ ठीक काम करता है। सभी * .so प्रोग्राम फ़ोल्डर के अंदर, lib फ़ोल्डर में हैं।

समस्या यह है कि, यदि मैं इस फ़ोल्डर को किसी अन्य कंप्यूटर पर कॉपी करता हूं तो मुझे समस्याएं मिलती हैं।

चलो कहते हैं कि मैं एक मशीन user2 (/ घर/user2/कार्यक्रम) पर इस चलाने के लिए, और मैं एक मशीन user1 (/ घर/user1/कार्यक्रम) में संकलित करते हैं, मैं जोड़ने त्रुटि मिलती है:

UnsatisfiedLinkError: /home/user1/program/lib/one.so

मैं कैसे पुस्तकालयों माता पिता कार्यक्रम फ़ोल्डर के सापेक्ष (तरह का जुड़ाव बना सकते हैं, this_foler/lib ??

मैं संकलन कर रहा हूँ के लिए खोज की तरह :

g++ -c -o src/wrapper.o src/wrapper.c 
g++ -shared -o wrapper.so src/wrapper.o one.so two.so 

उत्तर

8

How I can make the linking of the libraries relative to the parent program folder

आपके ऑपरेटिंग सिस्टम पर निर्भर करता है। लिनक्स पर, यह शायद काम करेगा:

g++ -shared -o wrapper.so -Wl,-rpath='$ORIGIN' src/wrapper.o one.so two.so 

नोट: एकल उद्धरण उपरोक्त आदेश में महत्वपूर्ण हैं।

+1

अगर उत्तर काम करता है तो रॉकस्कुल, आपको इसे स्वीकार करना होगा, इसे वोट देना होगा, या दोनों। यदि आप कुछ लोगों को अपने प्रश्नों का उत्तर nex समय का जवाब नहीं दे सकते हैं। –

+0

क्षमा करें। स्टैक ओवरफ़्लो के लिए नया। मैं इसे स्वीकार करता हूं, लेकिन मैं इसे वोट नहीं दे सकता। – lcguida

+0

@EmployedRussian क्या आप इंटेल कंपाइलर के लिए संबंधित कमांड जानते हैं? धन्यवाद। – xslittlegrass

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