2016-12-21 7 views
5

के रूप में करेगा, मैं libcryptopp.so बनाने की कोशिश कर रहा हूं और इसे अपने जेएनआई कोड में शामिल कर रहा हूं, Android Crypto++ में मार्गदर्शिका का पालन करें, मुझे निम्न समस्याओं का अनुभव हुआ। मेंचेतावनी: libcryptopp.so: गायब है DT_SONAME बेसनेम का उपयोग प्रतिस्थापन

गुम प्रतीक समस्याओं क्रिप्टो ++ 5.6.3

मूल रूप से मैं क्रिप्टो ++ 5.6.3 इस्तेमाल किया, मैं इस समस्या में आए:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_Z9GlobalRNGv" 

referenced by "/data/app/com.example.administrator.jnitest-2/lib/arm/libcryptopp.so"... 

मैं जाँच libcryptopp.so:

$ readelf -Ws libcryptopp.so | grep _Z9GlobalRNGv 
1406: 00000000  0 NOTYPE GLOBAL DEFAULT UND _Z9GlobalRNGv 
15836: 00000000  0 NOTYPE GLOBAL DEFAULT UND _Z9GlobalRNGv 

क्रिप्टो ++ 5.6.4 पर स्विचिंग इस समस्या को ठीक करें, लेकिन मुझे अभी भी कारण पता नहीं है और एक और समस्या से मुलाकात की:

लापता DT_SONAME

12-21 09:50:20.837 21677-21677/com.example.administrator.jnitest 
W/linker: /data/app/com.example.administrator.jnitest- 1/lib/arm/libcryptopp.so: is missing DT_SONAME will use basename as a 
replacement: "libcryptopp.so" 

असल में यह केवल एक चेतावनी है, एप्लिकेशन क्रैश नहीं करेंगे।

मैं एंड्रॉइड मैशवॉलो MOB31K का नवीनतम संस्करण उपयोग कर रहा हूं। किसी भी अन्य पुस्तकालयों

https://github.com/bytedeco/javacpp-presets/issues/188 

पर Android एन पूर्वावलोकन का उपयोग इसी तरह की समस्याओं का सामना करना पड़ा।

मुझे चेतावनी क्यों मिल रही है, और मैं इसे कैसे ठीक करूं?

+0

यह आपके ज्ञान को साझा करने का एक बड़ा इरादा है :) हालांकि, ऐसा करने का सही तरीका एक प्रश्न पोस्ट करना है, जैसे कि आपको वास्तव में कोई समस्या हो रही है, और अपने स्वयं के प्रश्न का उत्तर दे रहा है। यदि आप अपनी पोस्ट को अब के रूप में देते हैं, तो लोग कभी नहीं जानते कि आप वास्तव में उत्तर देते हैं। योगदान के लिए धन्यवाद! –

+0

@Yao - 5.6.3 ने सोनामे को जोड़ा। हमने देखा कि लोगों को आईओएस और एंड्रॉइड पर संस्करणित libs के साथ समस्याएं थीं, इसलिए हमने मोबाइल लक्ष्य के लिए SONAME को 5.6.4 पर हटा दिया। एंड्रॉइड और संस्करणित libs के बारे में मेलिंग सूची पर कुछ सवाल हैं। यह भी देखें [Commit d9c3c51aa8d3e710, गैर-SOLIBNAME को Android और एम्बेडेड के लिए डिफ़ॉल्ट संस्करण बनाएं] (https: // github।com/weidai11/cryptopp/प्रतिबद्ध/d9c3c51aa8d3e710b296b640d768d7b2cbac6efc)। – jww

+0

@ राइटलेग, निर्देश के लिए धन्यवाद, मैं एक नया लड़का हूं। मुझे खेद है कि बाद में मुझे लगता है कि यह वास्तव में एक चेतावनी है, मैंने सुधार किया है। लेकिन उम्मीद है कि यह अभी भी उपयोगी हो सकता है। – yao

उत्तर

2

कुछ प्रयासों के बाद, मुझे एक अपूर्ण समाधान मिलता है।

ऐसा प्रतीत होता है कि एंड्रॉइड एन मोड़ों को अब पुस्तकालय संस्करण की आवश्यकता है।

SONAME निर्माण पर ध्वज चालू करें।

क्रिप्टोप डिफ़ॉल्ट रूप से संस्करण ध्वज बंद कर देता है। GNUmakefile-पार ,: में

HAS_SOLIB_VERSION ?= 0 

1 के लिए मान सेट:

HAS_SOLIB_VERSION ?= 1 

निर्माण, और उसके बाद का उपयोग फ़ाइल .so उत्पन्न। चेतावनी जाएगी।

समस्या यह है कि पुस्तकालय एंड्रॉइड 5.0 पर काम नहीं करेगा। तो हम अब इस चेतावनी को अकेले छोड़ देंगे।

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