mylib.so में पाठ स्थानान्तरण है। यह स्मृति बर्बाद कर रहा है और एक सुरक्षा जोखिम है। कृपया ठीक करें

मेरा एंड्रॉइड एप्लिकेशन (मूल लाइब्रेरी का उपयोग करके) एंड्रॉइड 4.4 पर इस चेतावनी को प्रिंट करें:

लिंकर mylib.so में पाठ स्थानान्तरण है। यह स्मृति बर्बाद कर रहा है और एक सुरक्षा जोखिम है। कृपया ठीक करें।

क्या आपको पता है कि यह क्या है और इसे कैसे ठीक किया जाए? धन्यवाद,

39
जोड़ा संपादित
विचारों: 1

4 उत्तर

यह https://code.google पर उल्लिखित दो ndk-gcc बग का परिणाम प्रतीत होता है .com/p/android/issues/detail? id = 23203

और कहा कि एनएनडी-आर 8 सी के रूप में तय किया गया है।

ऐसा लगता है कि इस मुद्दे के साथ पुस्तकालयों की जांच हाल ही में जोड़ा गया है।

नोट: लिंक URL को छिपाने के लिए कृपया इस पोस्ट को नहीं करें संपादित करें। यह स्पष्ट है क्योंकि गंतव्य वह आधिकारिक बनाता है।

Further Note Changing NDK versions is only a fix when the warning is due to the code of your application. It will have no effect if the warning is instead on a system component such as libdvm - that can only be fixed by a system update.

25
जोड़ा
Adb के साथ installink apk जबकि एक ही त्रुटि है। Ndk-r9d का उपयोग करना।
जोड़ा लेखक Olcay Ertaş, स्रोत
यह उत्तर बहुत पुराना है और अब एनडीके के किसी भी आधुनिक संस्करण के लिए गलत है। अधिक संभावित समाधान के लिए नीचे मेरा उत्तर देखें।
जोड़ा लेखक Hypothetical inthe Clavicle, स्रोत
आपने कहा "बग"। अनदेखा किया जा सकता है? या यह एक असली मुद्दा है? धन्यवाद।
जोड़ा लेखक dentex, स्रोत
@HypotheticalintheClavicle पूरे बिंदु यह है कि यह दुर्भाग्यपूर्ण डिफ़ॉल्ट व्यवहार के साथ एनडीके के पुराने संस्करण का उपयोग करके कारण है। प्रश्न में एंड्रॉइड 4.4 के स्पष्ट उल्लेख पर ध्यान दें। आपका उत्तर वास्तविक प्रश्न पर लागू नहीं होता है, हालांकि यह अन्य संदर्भों में संबंधित स्थितियों के लिए उपयोगी हो सकता है। एपीके में वास्तव में प्रदत्त पुस्तकालयों के लिए सिस्टम पुस्तकालयों पर गलती चेतावनियों के खिलाफ सावधानी बरतें।
जोड़ा लेखक Chris Stratton, स्रोत
@ क्रिस स्ट्रैटन मुझे एक ही चेतावनी मिली और मैं एंड्रॉइड-एनडीके-आर 10 ई का उपयोग कर रहा हूं। क्या यह संभव नहीं है कि यह बग lib.so में कभी-कभी गलत हो। उदाहरण के लिए गतिशील स्मृति या कुछ जारी नहीं है
जोड़ा लेखक VMMF, स्रोत

आपको अपनी लाइब्रेरी स्थिति में कोड को स्वतंत्र बनाने की आवश्यकता है ... अपने एंड्रॉइड.एमके में -fpic या -fPIC को अपने LOCALC_FLAGS में जोड़ें। आपको यह सुनिश्चित करने की भी आवश्यकता है कि आप किसी स्थैतिक या साझा पुस्तकालयों के खिलाफ लिंक नहीं कर रहे हैं जिसमें टेक्स्ट स्थानान्तरण स्वयं शामिल हैं। यदि वे करते हैं और आप उन्हें फिर से संकलित कर सकते हैं, ऊपर वर्णित झंडे में से एक का उपयोग करें।

5
जोड़ा
आपको यह सुनिश्चित करना होगा कि आप जिस आर्क प्रकार के लिए संकलित कर रहे हैं उसके लिए आप सही स्विच का उपयोग कर रहे हैं। साथ ही, आप अपने .a या .so पर objdump का उपयोग कर सकते हैं यह देखने के लिए कि उनके पास टेक्स्ट स्थानान्तरण है या नहीं। वे स्वयं पुस्तकालयों के खिलाफ लिंक कर सकते हैं जिनके पास स्थानान्तरण भी है।
जोड़ा लेखक Hypothetical inthe Clavicle, स्रोत
आपको अपनी बिल्ड स्क्रिप्ट के माध्यम से LOCALC_FLAGS (या जो भी चर का नाम दिया गया है) का पता लगाने के लिए यह देखना चाहिए कि यह प्रश्न में पुस्तकालयों को पारित कर रहा है या नहीं।
जोड़ा लेखक Hypothetical inthe Clavicle, स्रोत
यह हो सकता है ndk संस्करण के आधार पर एक बग हो सकता है जो .so को संकलित करता है और ऐसा लगता है कि यह 2012 में तय किया गया है। यदि आप उस पुस्तकालय को लिख रहे हैं जिसे आप संकलित कर रहे हैं और यह इस चेतावनी को उत्पन्न कर रहा है, तो आपको इसे ठीक करो। एंड्रॉइड मार्शमलो के रूप में, पाठ स्थानान्तरण वाले पुस्तकालय नहीं करेंगे चेतावनी उत्पन्न करेंगे; वे एक त्रुटि उत्पन्न करेंगे और आपका ऐप लॉन्च पर क्रैश होगा।
जोड़ा लेखक Hypothetical inthe Clavicle, स्रोत
बहुत अच्छा! मदद करने में खुशी।
जोड़ा लेखक Hypothetical inthe Clavicle, स्रोत
@ सागरस्कर, मैं कैसे जान सकता हूं? आपने मुझे कुछ नहीं बताया है। कृपया एक प्रश्न खोलें जिसमें आवश्यक जानकारी शामिल है जैसे स्टैक निशान, डिवाइस का उपयोग, रेपो चरण आदि ..
जोड़ा लेखक Hypothetical inthe Clavicle, स्रोत
मैंने दोनों निर्भरता lib और निष्पादन योग्य में कोशिश की। उन्होंने ठीक संकलित किया लेकिन मेरे पास एक ही चेतावनी है। क्या आप वाकई सही स्विच कर रहे हैं?
जोड़ा लेखक dentex, स्रोत
धन्यवाद। एक बात। जैसा कि ऊपर बताया गया है, यह एक "बग" होना चाहिए। अनदेखा किया जा सकता है? या यह एक असली मुद्दा है?
जोड़ा लेखक dentex, स्रोत
धन्यवाद। तुम्हारी सहायता सराहनीय है
जोड़ा लेखक dentex, स्रोत
नवीनतम एनडीके पर स्विच करने के बाद, -fpic ध्वज काम करता प्रतीत होता है: readelf -a liblame.so | grep टेक्स्ट कुछ भी नहीं देता है और नया निष्पादन योग्य ऐप में कोई चेतावनी नहीं देता है। :)
जोड़ा लेखक dentex, स्रोत
@Clavicle। मैंने पहले से ही इस मुद्दे को ठीक किया है। एंड्रॉइड एल टेक्स्ट रिलायंसेशन में एक चेतावनी थी, लेकिन एंड्रॉइड एम में इसकी एक त्रुटि मैंने आपके द्वारा उल्लेखित झंडे का उपयोग करने के बाद ड्राइवर कोड में तय किया
जोड़ा लेखक Sagar Sakre, स्रोत
@ Hypothetical inthe Clavicle धन्यवाद, मेरा ऐप एम पर दुर्घटनाग्रस्त हो रहा है जो आसानी से एल पर काम कर रहा था, सोच रहा था कि क्यों।
जोड़ा लेखक Sagar Sakre, स्रोत

संक्षेप में, आपको अपनी लाइब्रेरी को -fpic या -fPIC झंडे में से एक के साथ संकलित करने की आवश्यकता है, जहां PIC स्थिति स्वतंत्र कोड

लंबा जवाब यह है कि आपका yourlib.so इस तरह से संकलित किया गया है जो किसी ईएलएफ फ़ाइल के लिए Google एंड्रॉइड मानक के अनुरूप नहीं है, जहां यह गतिशील ऐरे टैग प्रविष्टि है अप्रत्याशित। सबसे अच्छे मामले में लाइब्रेरी अभी भी चलती है, लेकिन यह अभी भी एक त्रुटि है और भविष्य में एओएस संस्करण शायद इसे चलाने की अनुमति नहीं देगा।

<�कोड> DT_TEXTREL 0x16 (22)

यह देखने के लिए कि पुस्तकालय में क्या है, इसकी रेखा के साथ कुछ उपयोग करें:

# readelf --wide -S yourlib.so

There are 37 section headers, starting at offset 0x40:

Section Headers:
  [Nr] Name              Type            Address          Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            0000000000000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS        0000000000000000 002400 068f80 00  AX  0   0 16
  [ 2] .rodata           PROGBITS        0000000000000000 06b380 05ad00 00  WA  0   0 32
  ...
  [16] .rela.text        RELA            0000000000000000 26b8e8 023040 18     14   1  8
  ...
  [36] .rela.debug_frame RELA            0000000000000000 25a608 0112e0 18     14  27  8

Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
  I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)

अधिक डीटी प्रविष्टि विवरण के लिए, कृपया विषय पर मेरा व्यापक उत्तर देखें। विवरण के लिए उचित गतिशील पुस्तकालयों को कैसे लिखना है यह एक जरूरी है

3
जोड़ा

मुझे अपने आवेदन के साथ एक ही त्रुटि मिली। एप्लिकेशन एक देशी डेमॉन का उपयोग कर रहा था जिसने एक मूल पुस्तकालय का उपयोग किया जो उसके शीर्षलेख फ़ाइल में सभी कार्यों को लागू नहीं कर रहा था। जब मैंने मूल पुस्तकालय में आवश्यक कार्यान्वयन जोड़ा जो सब कुछ अभी काम किया।

मुझे नहीं पता कि आपके पास एक ही समस्या है या नहीं, लेकिन शायद इसका मतलब है कि आपके मूल पक्ष में कुछ मेल नहीं है।

1
जोड़ा
क्या होगा यदि आप केवल ऐप में जावा का उपयोग करते हैं और चेतावनी प्राप्त करते हैं?
जोड़ा लेखक NoBugs, स्रोत
आपकी समस्या का समाधान इस प्रश्न के मुद्दे से कोई लेना देना नहीं है।
जोड़ा लेखक Chris Stratton, स्रोत
सवाल इस चेतावनी के लिए एक फिक्स के बारे में पूछता है। मेरे पास एक ही चेतावनी थी और एक मिस्चैच फिक्स ने इस मुद्दे को हल किया। हो सकता है कि आपके पास मूल मेल नहीं है लेकिन यह उन लोगों की मदद कर सकता है जो मेल नहीं खाते हैं और वह चेतावनी प्राप्त करते हैं ...
जोड़ा लेखक Ravit D, स्रोत