2013-01-13 8 views
9

पृष्ठभूमिसमस्याएं वस्तु संकलन का उपयोग कर हाथ-linux-androideabi-जीसीसी

  • OSX ओएस
  • है
  • R8 NDK

मैं निम्नलिखित वर्ग एंड्रॉयड जीसीसी संकलक का उपयोग कर संकलित करने के लिए कोशिश कर रहा हूँ .. ।

#include <stdint.h> 
int main (void){ 
    return 0; 
} 

मैं निम्न आदेश के साथ क्या ...

[email protected]:~/Development/Code/OpenGL$ ~/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-gcc hello.c -o hello 

मैं मिलता है ...

In file included from hello.c:1:0: 
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/include/stdint.h:3:26: fatal error: stdint.h: No such file or directory 
compilation terminated. 
जीसीसी ज्ञान की कमी (लेकिन कुछ गूगल की क्षमता) मैं इस खोजने के लिए और यह कोशिश की वजह से

तो ...

[email protected]:~/Development/Code/OpenGL$ ~/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-gcc hello.c -o hello -ffreestanding 

और मैं प्राप्त करें ...

/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory 
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory 
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc 
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl 
collect2: ld returned 1 exit status 

क्या कोई मेरी मदद कर सकता है जो मैं गलत कर रहा हूं? क्या मुझे कोई लिंक या कुछ याद आ रहा है? एंड्रॉइड.एमके एक विकल्प नहीं है।

अद्यतन यह या तो काम नहीं कर रहा ...

arm-linux-androideabi-gcc hello.c --sysroot=~/Development/Android/android-ndk-r8c/platforms/android-9/arch-arm 
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory 
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory 
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc 
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl 
collect2: ld returned 1 exit status 

उत्तर

6

इसलिए, चूंकि मैं एंड्रॉइड.एमके फ़ाइल का उपयोग नहीं करना चाहता, इसलिए मैं आगे बढ़ गया और एक स्टैंडअलोन टूलचेन बनाया। इस निम्नलिखित का उपयोग किया जाता ...

/Users/un/Downloads/android-ndk-r8d/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/tmp/my-toolchain 
/tmp/my-toolchain/bin/arm-linux-androideabi-gcc hello.c 

मुझे पता है कि क्या "वैकल्पिक" जीसीसी जोड़ने मैं कर सकता के संदर्भ में है चाहते हैं।

+1

अपनी एप्लिकेशन.एमके फ़ाइल को दोबारा जांचें और सुनिश्चित करें कि आपका प्लेटफ़ॉर्म संस्करण 8 से अधिक है। – Jackie

+1

मुझे उबंटू ओएस में कुछ तर्कों की आवश्यकता है:/home/user/android-ndk-r10d/build/tools $ ./ make-standalone-toolchain.sh --platform = android-21 --install-dir =/tmp/my-toolchain --toolchain = arm-linux-androideabi-4.9 - सिस्टम = linux-x86_64 और मैक ओएस एक्स के लिए : /उपयोगकर्ता/उपयोगकर्ता/एंड्रॉइड-एनडीके-आर 10 डी/बिल्ड/टूल्स $ ./make-standalone-toolchain.sh --platform = android-21 --install-dir =/tmp/my-toolchain --ndk-dir =/उपयोगकर्ता/उपयोगकर्ता/android-ndk-r10d/--toolchain = arm-linux-androideabi-4.9 - सिस्टम = डार्विन-x86_64 – Neonigma

8

आप जीसीसी जहां एंड्रॉयड सिस्टम फ़ाइलों और हेडर लगाने के लिए बताना होगा। या तो उपयोग:

  1. ndk-build और BUILD_EXECUTABLE
  2. या, --sysroot जीसीसी विकल्प के साथ एक Android.mk

[1]

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := foo 
LOCAL_SRC_FILES := foo.c 

include $(BUILD_EXECUTABLE) 

[2]

# Change `android-9` with the level you target 
/path/to/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt\ 
/darwin-x86/bin/arm-linux-androideabi-gcc\ 
--sysroot /path/to/android-ndk-r8c/platforms/android-9/arch-arm/\ 
    foo.c -o foo 

# Or generate a ready-to-use standalone toolchain (better) 
/path/to/android-ndk-r8c/build/tools/make-standalone-toolchain.sh \ 
--platform=android-9 \ 
--install-dir=/tmp/my-android-toolchain 

export SYSROOT=/tmp/my-android-toolchain/sysroot 

/path/to/arm-linux-androideabi-gcc --sysroot $SYSROOT foo.c -o foo 
+0

Sysroot काम नहीं किया, Android.mk एक विकल्प नहीं है। अगर मैं एक स्टैंडअलोन टूलचेन बना देता हूं तो मैं इसे काम पर ला सकता हूं लेकिन क्या रीक libs को जोड़ने का कोई तरीका नहीं है? – Jackie

+1

sysroot ** ** काम करता है (आपको गलती या टाइपो बनाना चाहिए था)। उपर्युक्त समाधान एक ही चीज़ के रूप में भिन्न हैं: अपने कंपाइलर को बताएं कि सिस्टम संसाधन कहां खोजें। न आधिक न कम। और यदि आपको आधिकारिक रूप से उपयोग किए जाने वाले विस्तृत कदम/झंडे प्राप्त करने की आवश्यकता है, तो आउटपुट देखने के लिए बस 'ndk-build V = 1' का उपयोग करें। – deltheil

+0

यह यहां मेरा काम नहीं था ... arm-linux-androideabi-gcc hello.c --sysroot = ~/विकास/एंड्रॉइड/एंड्रॉइड-एनएनडी-आर 8 सी/प्लेटफॉर्म/एंड्रॉइड -9/आर्क-आर्म – Jackie

5

यह उत्तर @ deltheil के उत्तर में थोड़ा और विवरण जोड़ता है। मेरे पास समान समस्याएं थीं क्योंकि मैं Android पर I2C बस डीबग करने के लिए I2C-tools संकलित करने का प्रयास कर रहा था। फ़ाइलों को बनाने और विभिन्न विकल्पों को आजमाने के लिए किसी दिन से अधिक समय तक संघर्ष करने के बाद --sysroot & - गतिशील-लिंकर विकल्प इत्यादि, मैंने अंत में एंड्रॉइड एओएसपी पेड़ के भीतर संकलित करने की कोशिश की। मैंने Google Nexus-S AOSP का उपयोग बाइनरी बनाने के लिए किया था जिसे मैं सैमसंग एस 3 फोन पर चलाने का इरादा रखता था। मैंने एओएसपी/बाहरी फ़ोल्डर के अंदर स्रोतों के लिए i2c-tools नामक एक फ़ोल्डर बनाया और एंड्रॉइड.एमके, क्लींसपेक की प्रतिलिपि बनाई।एक

source build/envsetup.sh 
make i2cdetect 
AOSP आधार फ़ोल्डर और देखा से

, मैं था: एक और निष्पादन फ़ोल्डर (पिंग) से mk & MODULE_LICENCE और I2C-उपकरणों के लिए इसे संशोधित इस प्रकार है:

ifneq ($(TARGET_SIMULATOR), true) 

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_SRC_FILES := i2cdetect.c i2cbusses.c 

LOCAL_C_INCLUDES := $(KERNEL_HEADERS) 
LOCAL_MODULE := i2cdetect 
LOCAL_MODULE_TAGS := tests 
LOCAL_SHARED_LIBRARIES := libc 

include $(BUILD_EXECUTABLE) 

endif 

तब मैं सिर्फ भाग गया बाहर/लक्ष्य/उत्पाद/जेनेरिक/सिस्टम/बिन/फ़ोल्डर में निष्पादन योग्य काम कर रहा है। ध्यान दें कि मुझे मूल (i2c-tools)/tools & से सभी आवश्यक स्रोत और शीर्षलेख फ़ाइलों को प्रतिलिपि बनाना था फ़ोल्डरों को शामिल करना था और शीर्षलेख फ़ाइलों के लिए अतिरिक्त पथ को निकालने के लिए # शामिल करने के लिए कुछ को संशोधित करना था जो अब एक ही स्थान पर थे सी-स्रोत।

+0

मॉड्यूल नाम के बाद पिछली जगहों से बचने के लिए नोट करें। उपर्युक्त उदाहरण में ऐसी कोई समस्या नहीं है। – KrisWebDev

0

मेरे मामले में, मैं एक फ़ाइल की जरूरत है और मुख्य() परिभाषित करने की आवश्यकता नहीं किया था। मैं -c स्विच निर्दिष्ट करने के लिए किया था:

~/ax/arm-linux-androideabi-g++ --sysroot=~/an/platforms/android-8/arch-arm/ -c dummy.c 

जहां ~/कुल्हाड़ी और ~/एक लिंक कर रहे हैं:

ax -> ~/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/ 
an -> ~/android-ndk-r9d/ 

dummy.o किया था।

0

मैं समस्या हल, ubuntu में डिफ़ॉल्ट संपीड़ित फ़ाइल प्रबंधक सांकेतिक लिंक निकालने नहीं कर रहा था, तो मैं करने की कोशिश की: राल JXF filename.tar.bz2 ndk.tar.bz2 untar करने और अब यह ठीक काम करता है

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