2015-10-23 7 views
10

के लिए सी प्रोग्राम को संकलित करने के लिए मैं एक सरल हैलोवर्ल्ड एप्लिकेशन बनाने और इसे जेनमोशन पर चलाने की कोशिश कर रहा हूं। मेरी बिल्डिंग सिस्टम उबंटू 14.04 64 बिट है। मेरे पास एंड्रॉइड एसडीके (आर 22.6.2) और एनडीके (आर 9 डी) स्थापित है।जेनमोशन (एंड्रॉइड x86)

प्रथम प्रयास: पहले से बनाए गए NDK एआरएम toolchain

TOOLCHAIN = $NDK/toolchains/arm-linux-androideabi-4.8 
$TOOLCHAIN/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$PLATFORM hello.c -o hello 
adb push hello /sdcard/ 
./hello 

मैं एक त्रुटि

/system/bin/sh: ./Hello: not executable: magic 7F45 

मिल कुछ शोध करने के बाद का उपयोग कर निर्माण, मैं जल्दी से एहसास Genymotion मेहराब के बजाय एआरएम है

दूसरा प्रयास: x86 स्टैंडअलोन टूल का उपयोग करके बनाएं चेन

  1. मेक 86 standlone toolchain पहले

    cd $NDK/build/tools 
    ./make-standalone-toolchain.sh --arch=x86 --platform=android-19 --install-dir=/tmp/android-toolchain --ndk-dir=../../. --system=linux-x86_64 
    
  2. toolchain का उपयोग कर नमस्ते बिल्ड

    cd tmp/android-toolchain/bin 
    ./i686-linux-android-gcc -o Hello -c hello.c 
    
  3. भागो हैलो Genymotion

    पर
    adb push hello /data/local/tmp 
    adb shell 
    cd /data/local/tmp 
    ./hello 
    /system/bin/sh: ./Hello: not executable: magic 7F45 
    

जीनमोशन मशीन पर uname -a रैन। Android System Name निष्पादन Hello File info

पर file Hello Ran तो यह एक मैच होना चाहिए।

अभी भी वही त्रुटि मिल रही है। अगर कोई कुछ प्रकाश डाल सकता है तो वास्तव में इसकी सराहना करेंगे।

संपादित करें 1:/sdcard/के बजाय निष्पादन योग्य/डेटा/स्थानीय/tmp में निष्पादन योग्य प्रयास करने का प्रयास किया। अभी भी एक ही त्रुटि देता है।

संपादित करें 2: genymotion प्रणाली और file निष्पादन पर पर uname Ran अगर वे से मेल देखने के लिए।

+0

मेरा मानना ​​है कि एक भ्रम है: आप 'हैलो' को'/sdcard' पर दबाते हैं, लेकिन '/' (रूट निर्देशिका) से 'हैलो' चलाते हैं। किसी भी दर पर, एंड्रॉइड सुरक्षा कारणों से/sdcard और अन्य बाहरी स्टोरेज को गैर-निष्पादन योग्य के रूप में माउंट करता है। इसलिए, यदि आप अपने निष्पादन योग्य को धक्का और चलाने के लिए चाहते हैं, तो कुछ अन्य निर्देशिका का उपयोग करें। '/ डेटा/स्थानीय/टीएमपी आमतौर पर एक अच्छी पसंद है। –

+0

मैंने अभी निष्पादन योग्य/डेटा/स्थानीय/tmp में चलाने की कोशिश की। अभी भी मुझे एक ही त्रुटि देता है – HBZ

+0

क्या आपने 'chmod 700/डेटा/स्थानीय/tmp/हैलो 'चलाया था? –

उत्तर

1

यदि सादा जीसीसी आपकी नौकरी नहीं पाती है, तो आपको कठिन मार्ग लेना होगा।

आपको एक क्रॉस-टूलचेन की आवश्यकता है; मैं क्रॉसस्टूल ~ एनजी का उपयोग कर एक कनाडाई क्रॉस टूलचेन उत्पन्न करने का सुझाव देता हूं; आप एनडीके के स्टैंडअलोन टूलचेन को शुरुआती बिंदु के रूप में उपयोग कर सकते हैं।