2016-01-04 5 views
7

मैं अपने एंड्रॉइड फोन में संकलित बाइनरी चलाने की कोशिश कर रहा हूं, लेकिन यह मुझे "ऐसी कोई फ़ाइल या निर्देशिका" नहीं बताता है।मैं एंड्रॉइड में संकलित बाइनरी कैसे चला सकता हूं?

विशिष्ट होने के लिए, मैंने wificurse संकलित किया है, और विवरण के अनुसार एक आर्म कमांड का उल्लेख किया गया है, यह स्पष्ट है कि स्रोत कोड को आर्म आर्किटेक्चर के लिए मेकफ़ाइल में कोई बदलाव किए बिना संकलित किया जा सकता है।

export CROSS_COMPILE=arm-linux-gnueabi- 

make CROSS_COMPILE=arm-linux-gnueabi- 

और फिर जिसके परिणामस्वरूप बाइनरी (wificurse) के साथ मैं निम्नलिखित किया:

adb push wificurse /data 

एक रूट adb शेल मैंने किया था में:

 [email protected]:/data # chmod 0777 wificurse 

और इसलिए मैं निम्नलिखित किया कुछ भी वापस नहीं करता है; काम करता है।

 [email protected]:/data # chmod u+x wificurse 

"खराब मोड" देता है।

 [email protected]:/data # busybox chmod 077 wificurse 

कुछ भी वापस नहीं करता है; काम करता है।

 [email protected]:/data # busybox chmod u+x wificurse 

कुछ भी वापस नहीं करता है; काम करता है।

लेकिन जब मैं के साथ

[email protected]:/data # ./wificurse 

यह रिटर्न "/ प्रणाली/bin/sh: ./wificurse: ऐसी कोई फ़ाइल या निर्देशिका" बाइनरी चलाने के लिए प्रयास करें। क्या फ़ोल्डर में एक ls और बाइनरी वास्तव में वहाँ था।

पहले से ही आंतरिक एसडीकार्ड में द्विआधारी की प्रतिलिपि बनाने की कोशिश की गई है, फिर/डेटा (यहां तक ​​कि कोशिश/सिस्टम/बिन और/सिस्टम/xbin) पर जाकर यह "एक्सेस अस्वीकृत" लौटाता है, लेकिन यदि मैं बाइनरी को chmod करता हूं तो यह वापस आ जाएगा एक ही त्रुटि (ऐसी कोई फ़ाइल या निर्देशिका नहीं)। क्या कोई कृपया मेरी यह मदद कर सकता है? मैंने 2+ सालों के लिए लिनक्स खोल का उपयोग किया है, हालांकि प्रोग्रामिंग सामग्री की बात आती है जब मैं पूरी तरह से नोब हूं। मुझे लगता है कि मुझे टूलचैन की तरह कुछ याद आ रहा है, मुझे नहीं पता।
मैं उबंटू 15.10 x64 चला रहा हूं।

उत्तर

1

आपकी बाइनरी स्पष्ट रूप से कुछ साझा लाइब्रेरी (.so) पर निर्भर करती है। जो गतिशील लिंकिंग के लिए दृश्यमान नहीं है। आप अपने toolchain से readelf उपयोग कर सकते हैं और आप कुछ इस तरह मिलती है:

[email protected]:~/workspace/test/arm-v7a_android9/release$ ~/toolchains/armeabiv7a_android-9_ndk-r10e_gcc-4.9/bin/arm-linux-androideabi-readelf -d test 

Dynamic section at offset 0x445a14 contains 27 entries: 
    Tag  Type       Name/Value 
0x00000003 (PLTGOT)      0x44fc50 
0x00000002 (PLTRELSZ)     1864 (bytes) 
0x00000017 (JMPREL)      0x74d24 
0x00000014 (PLTREL)      REL 
0x00000011 (REL)      0x74cd4 
0x00000012 (RELSZ)      80 (bytes) 
0x00000013 (RELENT)      8 (bytes) 
0x00000015 (DEBUG)      0x0 
0x00000006 (SYMTAB)      0x8148 
0x0000000b (SYMENT)      16 (bytes) 
0x00000005 (STRTAB)      0x26718 
0x0000000a (STRSZ)      273460 (bytes) 
0x00000004 (HASH)      0x6934c 
0x00000001 (NEEDED)      Shared library: [liblog.so] 
0x00000001 (NEEDED)      Shared library: [libm.so] 
0x00000001 (NEEDED)      Shared library: [libc.so] 
0x00000001 (NEEDED)      Shared library: [libdl.so] 
0x0000001a (FINI_ARRAY)     0x447cb8 
0x0000001c (FINI_ARRAYSZ)    12 (bytes) 
0x00000019 (INIT_ARRAY)     0x447cc4 
0x0000001b (INIT_ARRAYSZ)    324 (bytes) 
0x00000020 (PREINIT_ARRAY)    0x447e08 
0x00000021 (PREINIT_ARRAYSZ)   0x8 
0x0000001e (FLAGS)      BIND_NOW 
0x6ffffffb (FLAGS_1)     Flags: NOW 
0x00000000 (NULL)      0x0 

चेक उस प्रकार (NEEDED) साथ सभी पुस्तकालयों अपने Android डिवाइस पर कर रहे हैं और के लिए दिखाई दे रहे हैं अपनी बाइनरी (आप .so के लिए उपलब्ध बनाने के लिए export LD_LIBRARY_PATH=<path>[:<another_path>[..]] का उपयोग करना चाहिए आपके बाइनरी के साथ गतिशील लिंकिंग)।

यदि समस्या अभी भी हल नहीं हुई है, तो आपका एप्लिकेशन कुछ सिस्टम लाइब्रेरी के विभिन्न संस्करण से जुड़ा हुआ है - पुराने टूलचेन का उपयोग करने का प्रयास करें।

0

क्या आपने इस धागे में विधियों का प्रयास किया था? "No such file or directory" trying to execute linux binary on Android device

इस समस्या को हल करने का एक वैकल्पिक तरीका Android पर KBOX इंस्टॉल करेगा। लेखक ने एंड्रॉइड मंच के लिए जीसीसी, एसएसएच सर्वर जैसे टूल्स विकसित किए हैं। इसलिए, आप अपने फोन पर एक एसएसएच सर्वर शुरू कर सकते हैं और अपने पीसी पर अपना पूरा काम कर सकते हैं, जिसका मतलब है कि आप सीधे अपने फोन को फोन पर संकलित कर सकते हैं :)

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