2013-03-06 3 views
7

मैं एक बहुत ही सरल Android एप्लिकेशन है जो तीन हिस्से होते हैं विकासशील शुरू कर दिया है:Dalvik '.0' विस्तार के साथ .so फ़ाइल के लिए लग रही है?

  • जावा आवेदन ही
  • पहले से बने साझा लाइब्रेरी एक और साझा लाइब्रेरी (हम इसे libfoo फोन करता हूँ)
  • कि पहले से बने पुस्तकालय का उपयोग करता है (हम इसे libfoowrapper फोन करता हूँ)

फाइल सिस्टम इस तरह दिखता है:

- कोई त्रुटि रिपोर्ट कर रहे हैं

LOCAL_PATH := $(call my-dir) 

#============================== 

include $(CLEAR_VARS) 

LOCAL_MODULE := foo-prebuilt 
LOCAL_SRC_FILES := libfoo.so 

include $(PREBUILT_SHARED_LIBRARY) 

#========================= 

include $(CLEAR_VARS) 

LOCAL_MODULE := foowrapper 
LOCAL_SRC_FILES := foowrapper.c 

LOCAL_SHARED_LIBRARIES := foo-prebuilt 

include $(BUILD_SHARED_LIBRARY) 

जब मैं ग्रहण में आवेदन का निर्माण, चीजों को ठीक से काम करने लगते हैं:

jni 
Android.mk 
libfoo.so 
foowrapper.c 

Android.mk फ़ाइल निम्न सामग्री शामिल है। हालांकि, जब मैं अपने सैमसंग डिस्कवर करने के लिए आवेदन अपलोड (चल एंड्रॉयड 4.0.4), मैं लॉग में निम्न त्रुटि मिलती है:

03-05 21:20:27.859: E/AndroidRuntime(20324): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1936]: 102 could not load needed library 'libfoo.so.0' for 'libfoowrapper.so' (load_library[1091]: Library 'libfoo.so.0' not found) 

क्यों Dalvik के बजाय एक .so.0 फ़ाइल एक .so फ़ाइल के लिए लग रही है? इस त्रुटि से छुटकारा पाने के लिए मुझे अपने ऐप में क्या बदलाव करने की ज़रूरत है?

+0

आप कॉपी कैसे आप कर सकते हैं जावा पक्ष में पुस्तकालय लोड कर रहे हैं? आपको सिस्टम निष्पादित करने की आवश्यकता है।सही क्रम में, जावा में एक स्थिर ब्लॉक में loadLibrary ("foo") और System.loadLibrary ("foowrapper")। इसके अलावा, क्या आपने इसे किसी अन्य डिवाइस में आजमाया है? – Esparver

+0

'libfoowrapper.so' जैसे लगता है' libfoo.so.0' का संदर्भ है। जांचें कि 'libfoowrapper.so' किसके साथ जुड़ा हुआ है। – fadden

उत्तर

4

कम से कम लिनक्स दुनिया में, हर शेयर की गई लाइब्रेरी एक विशेष नाम soname कहा जाता है। सोनमेम में lib, लाइब्रेरी का नाम, वाक्यांश .so है, इसके बाद एक अवधि और एक संस्करण संख्या है जो इंटरफ़ेस में परिवर्तन होने पर बढ़ी है (एक विशेष अपवाद के रूप में, निम्न-स्तर सी पुस्तकालय lib से शुरू नहीं होते हैं)। एक पूरी तरह से योग्य soname में एक निर्देशिका उपसर्ग के रूप में शामिल है; एक काम कर प्रणाली पर एक पूरी तरह से योग्य soname बस साझा लाइब्रेरी के real name के लिए एक प्रतीकात्मक कड़ी है।

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

संदर्भ: Linux Standard Base

संपादित करें: ऐसा लगता है यह एक असामान्य समस्या नहीं है, नहीं किसी भी असली समाधान यह करने के लिए देखा है, लेकिन शायद यह आप कुछ है कि आप के लिए काम करता है पाने के लिए शुरू कर दिया मिल जाएगा।

PREBUILT_SHARED_LIBRARY https://groups.google.com/forum/#!topic/android-ndk/_UhNpRJlA1k

का उपयोग करते समय के लिए गैर संस्करणीकृत साझा पुस्तकालयों बनाना LOCAL_SRC_FILES के साथ समस्या एंड्रॉयड http://www.opengis.ch/2011/11/23/creating-non-versioned-shared-libraries-for-android/

लाइब्रेरी 'libproj.so.0' नहीं मिला https://groups.google.com/forum/?fromgroups=#!topic/android-ndk/ai3tu0XXs88

+0

यह वास्तव में मेरी बात करने के लिए मेरी गलती है, लेकिन मेरा वास्तविक सवाल यह है कि "मैं इसे कैसे ठीक कर सकता हूं?" मेरा ऐप अपने वर्तमान रूप में नहीं चलेगा। –

+0

क्यों इसका नाम बदलना नहीं है और यह देखने का प्रयास करें कि यह काम करता है या नहीं? :) – kaderud

+0

फिर मुझे एक त्रुटि मिलती है 'एंड्रॉइड एनडीके: त्रुटि: जेनी/एंड्रॉइड.एमके: जीआईटी 2-प्रीबिल्ट: LOCAL_SRC_FILES एक लापता फाइल को इंगित करता है। –

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