c++ - लक्ष्य डिवाइस पर क्रॉस-कंपाइल किए गए निष्पादन योग्य को चलाने की कोशिश करना विफल रहता है: ऐसा कोई फ़ाइल या निर्देशिका नहीं है




arm cross-compiling (2)

चूंकि टिप्पणियों से कोई भी जवाब नहीं पोस्ट करता है, मुझे लगता है मुझे आनंद मिलता है;)

No such file or directory तब से नहीं आता है जब कर्नेल ELF निष्पादन योग्य .interp फ़ील्ड द्वारा निर्दिष्ट गतिशील लिंकर को आमंत्रित करने का प्रयास करता है, लेकिन ऐसी कोई फ़ाइल मौजूद नहीं है।

.interp फ़ील्ड को निम्न कमांड के साथ पाया जा सकता है:

objdump -j .interp -s ./hello_world

इस उदाहरण के मामले में, निष्पादन योग्य .interp फ़ील्ड /lib/ld-linux.so.3 था, लेकिन बीगल बोन ब्लैक पर डायनेमिक लिंकर का नाम /lib/ld-linux-armhf.so.3

ऐसा इसलिए हुआ क्योंकि इस कार्यक्रम को प्लेटफॉर्म के लिए आवश्यक उपकरण से थोड़ा अलग टूलचैन के साथ संकलित किया गया था। यह arm-linux-gnueabihf-* बजाय arm-linux-gnueabi-* होना चाहिए

मैं जो समझता हूं, कॉर्टेक्स- A8 एआरएमवी 7 में हार्डवेयर-आधारित फ़्लोटिंग प्वाइंट ऑपरेशंस का उपयोग करता है, लेकिन एआरएम अनुदेश सेट के पिछले संस्करण सॉफ़्टवेयर-आधारित तकनीकों का उपयोग किया गया था। यह armhf और armhf बीच अंतर है। नतीजतन, armhf कार्यक्रम armhf पर armhf (बशर्ते गतिशील लिंकर को सही पथ पर सेट किया गया है!), लेकिन इसके ठीक विपरीत नहीं।

बस एक प्रतीकात्मक लिंक जोड़ने ln -s /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3 इस समस्या को हल करने के लिए पर्याप्त है, लेकिन सही फिक्स सही उपकरण ln -s /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3 का उपयोग करते समय संकलित करते समय पहला स्थान पर कार्यक्रम

मैं पार-संकलन की न तो-सनी दुनिया में पकड़ा गया हूं।

मैं अपने बीगल बोन ब्लैक (जो कि टीआई कॉर्टेक्स-ए 8 प्रोसेसर चलाता है) के लिए एक सरल हैलो वर्ल्ड एप्लिकेशन को संकलित करने की कोशिश कर रहा हूं

सबसे पहले, मैंने संकलित किया और gcc साथ x86 पर सफलतापूर्वक हैलो वर्ल्ड एप्लीकेशन चलाया

फिर मैंने अपनी संकलन सेटिंग्स को निम्न में बदल दिया:

arm-linux-gnueabi-gcc -c -O0 -g3 -Wall main.c -o bin/obj/main.o
arm-linux-gnueabi-gcc bin/obj/main.o -o bin/hello_world

मैंने फ़ाइल को एससीपी के माध्यम से बीगल बोन में हस्तांतरित किया है, और chmod +x hello_world साथ निष्पादन योग्य अनुमतियों को सेट किया है

इसे चलने पर ( ./hello_world ), मेरी ही प्रतिक्रिया है:

-bash: ./hello_world: No such file or directory

file का उत्पादन /sbin/init मेल से मेल खाता है जैसा मैं उम्मीद करता हूं:

$ file hello_world
hello_world: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x24b659b7a41fe043a6f4649d4ebfb5e692ebf0c7, not stripped
$ file /sbin/init
/sbin/init: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd21f6957ec031a27d567b3d5e6aa14b9e0c30c37, stripped

ldd का नतीजा है:

$ ldd hello_world
    not a dynamic executable

मैंने एक उपयुक्त मंच और सीपीयू प्रकार जोड़ने का प्रयास किया, मेरे संकलन को इसमें बदल दिया:

arm-linux-gnueabi-gcc -c -O0 -g3 -Wall -march=armv7-a -mtune=cortex-a8  main.c -o bin/obj/main.o
arm-linux-gnueabi-gcc bin/obj/main.o -o bin/hello_world

यह शुरू में मुझे एक नई त्रुटि देना शुरू कर दिया: Text file busy , लेकिन तब से मैं उस त्रुटि को फिर से प्राप्त करने में असमर्थ हूं क्योंकि अब यह No such file or directory । मुझे लगता है कि विशेष प्रयास सिर्फ एक खराब हस्तांतरण या कुछ और था।


मुझे भी यही समस्या थी। मैंने उबंटू रिपॉजिटरी से अपने उबंटू पीसी में एपीटी-मिल का इस्तेमाल करते हुए gcc-arm-linuc-gnueabihf फिर मैंने एक नरक परीक्षण कार्यक्रम संकलित किया और इसे मेरे बीगल बोन में sftp का उपयोग करके डाउनलोड किया।

BBB पर कार्यक्रम चलाने की कोशिश में त्रुटि दी: "ऐसी कोई फ़ाइल या निर्देशिका नहीं"

Objdump का उपयोग करके मैंने पाया कि ELF निष्पादन योग्य में .interp क्षेत्र /lib/ld_linux_armhf.so.3 था। मेरे बीबीबी के डायनेमिक लिंकर / /lib/ld-linux.so.3/lib/ld-linux.so.3

मैंने BBB पर एक प्रतीकात्मक लिंक बनाया है:

ln -s /lib/ld-linux.so.3 /lib-linux-armhf.so.3

अब क्रॉस-कंपाइल किए गए एप्लिकेशन बीबीबी पर काम करता है। BBB मूल अंगस्टोम वितरण चल रहा है।

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

मुझे लगता है कि त्रुटि संदेश डायनेमिक लिंकर फ़ाइल के कारण नहीं है, ऐसा नहीं है कि यह अनुप्रयोग मौजूद नहीं है।