2013-10-13 4 views
16
gcc (GCC) 4.8.1 
android-ndk-r9 

नमस्ते के लिए पार संकलन,को cmake के साथ एक toolchain बिल्डिंग एंड्रॉयड

मेरे मेजबान मशीन Fedora 19 है और मैं एंड्रॉयड पर चलने के लिए कार्यक्रमों के संकलन के लिए एक toolchain बनाना चाहते हैं, बाद में मैं विस्तार करना चाहते आईओएस के लिए यह।

Check for working C compiler: /opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -- broken 

मुझे यकीन है कि मैं क्यों इस त्रुटि हो रही है, सब कुछ के रूप में स्थापित किया गया है नहीं कर रहा हूँ:

मैं निम्नलिखित त्रुटि मिलती है। मैंने binutils-arm-linux-gnu भी स्थापित किया है। हालांकि, यह मेरी पहली बार इस तरह की चीज है, इसलिए मुझे बहुत कुछ मिल गया है।

मैं एंड्रॉइड डिवाइस पर लाइब्रेरी चलाने के लिए cmake को croos-compile का उपयोग करके टूलचैन फ़ाइल बनाने का प्रयास कर रहा हूं।

/opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin 

arm-linux-androideabi-addr2line 
arm-linux-androideabi-ar 
arm-linux-androideabi-as 
arm-linux-androideabi-c++ 
arm-linux-androideabi-c++filt 
arm-linux-androideabi-cpp 
arm-linux-androideabi-elfedit 
arm-linux-androideabi-g++ 
arm-linux-androideabi-gcc 
arm-linux-androideabi-gcc-4.8 
arm-linux-androideabi-gcc-ar 
arm-linux-androideabi-gcc-nm 
arm-linux-androideabi-gcc-ranlib 
arm-linux-androideabi-gcov 
arm-linux-androideabi-gdb 
arm-linux-androideabi-gprof 
arm-linux-androideabi-ld 
arm-linux-androideabi-ld.bfd 
arm-linux-androideabi-ld.gold 
arm-linux-androideabi-ld.mcld 
arm-linux-androideabi-nm 
arm-linux-androideabi-objcopy 
arm-linux-androideabi-objdump 
arm-linux-androideabi-ranlib 
arm-linux-androideabi-readelf 
arm-linux-androideabi-run 
arm-linux-androideabi-size 
arm-linux-androideabi-strings 
arm-linux-androideabi-strip 

मेरे पार संकलन फ़ाइल है::

मैं संकलक के लिए पथ के साथ निम्न स्थान पर android-NDK-R9 स्थापित किया है

include(CMakeForceCompiler) 

set(toolchain_path /opt/ndk/toolchains) 

# Target system 
set(CMAKE_SYSTEM_NAME Linux) 

set(CMAKE_SYSTEM_PROCESSOR arm) 

set(CMAKE_SYSTEM_VERSION 1) 

# Compiler to build for the target 
set(CMAKE_C_COMPILER /opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc) 

set(CMAKE_FIND_ROOT_PATH /opt/ndk/toolchains) 

मैं से चलाने मेरी रूट टूल में मेरे टूलचेन के साथ निर्देशिका बनाएं/डीबग करें।

[[email protected] debug]$ cmake -DCMAKE_TOOLCHAIN_FILE=arm-eabi-gcc.cmake ../.. 

आउटपुट

-- The C compiler identification is GNU 4.8.0 
-- Check for working C compiler: /opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc 
-- Check for working C compiler: /opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc -- broken 
CMake Error at /usr/share/cmake/Modules/CMakeTestCCompiler.cmake:61 (message): 
    The C compiler 
    "/opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc" 
    is not able to compile a simple test program. 

    It fails with the following output: 

    Change Dir: /home/steve/mobile_progs/linux_pjsip/build/debug/CMakeFiles/CMakeTmp 

    Run Build Command:/usr/bin/gmake "cmTryCompileExec379796592/fast" 

    /usr/bin/gmake -f CMakeFiles/cmTryCompileExec379796592.dir/build.make 
    CMakeFiles/cmTryCompileExec379796592.dir/build 

    gmake[1]: Entering directory 
    `/home/steve/mobile_progs/linux_pjsip/build/debug/CMakeFiles/CMakeTmp' 

    /usr/bin/cmake -E cmake_progress_report 
    /home/steve/mobile_progs/linux_pjsip/build/debug/CMakeFiles/CMakeTmp/CMakeFiles 
    1 

    Building C object 
    CMakeFiles/cmTryCompileExec379796592.dir/testCCompiler.c.o 

    /opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc 
    -o CMakeFiles/cmTryCompileExec379796592.dir/testCCompiler.c.o -c 
    /home/steve/mobile_progs/linux_pjsip/build/debug/CMakeFiles/CMakeTmp/testCCompiler.c 

    Linking C executable cmTryCompileExec379796592 

    /usr/bin/cmake -E cmake_link_script 
    CMakeFiles/cmTryCompileExec379796592.dir/link.txt --verbose=1 

    /opt/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc 
    CMakeFiles/cmTryCompileExec379796592.dir/testCCompiler.c.o -o 
    cmTryCompileExec379796592 -rdynamic 

    /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: 
    error: cannot open crtbegin_dynamic.o: No such file or directory 


    /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: 
    error: cannot open crtend_android.o: No such file or directory 

    /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: 
    error: cannot find -lc 

    /opt/android-ndk-r9/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: 
    error: cannot find -ldl 

    collect2: error: ld returned 1 exit status 

    gmake[1]: *** [cmTryCompileExec379796592] Error 1 

    gmake[1]: Leaving directory 
    `/home/steve/mobile_progs/linux_pjsip/build/debug/CMakeFiles/CMakeTmp' 

    gmake: *** [cmTryCompileExec379796592/fast] Error 2 

    CMake will not be able to correctly generate this project. 
Call Stack (most recent call first): 
    CMakeLists.txt:4 (project) 

अग्रिम में बहुत धन्यवाद,

उत्तर

11

मैं पहली बार इस वेबसाइट पर जाकर समस्या का समाधान करने में कामयाब रहे:

http://developer.android.com/tools/sdk/ndk/index.html

स्टैंडअलोन toolchain कि NDK के साथ आता है का उपयोग करने का एक उदाहरण है।

make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.8 

मेरी/ऑप्ट निर्देशिका में निकाला गया।

और यह नमूना toolchain cmake फ़ाइल

# Target system 
set(CMAKE_SYSTEM_NAME Android) 

set(CMAKE_SYSTEM_VERSION 1) 

# Compiler to build for the target 
set(CMAKE_C_COMPILER /opt/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-gcc) 
set(CMAKE_CXX_COMPILER /opt/arm-linux-androideabi-4.8/bin/arm-linux-androideabi-g++) 

सब कुछ बस उस के बाद काम का उपयोग कर। हालांकि, मुझे अपनी पिछली समस्या काम नहीं कर सका। हो सकता है कि मैंने गलत पथों पर गलत तरीके से कुछ पर्यावरणीय चर सेट किए हैं।

उम्मीद है कि यह किसी और की मदद करेगा।

+0

धन्यवाद इस ठीक काम किया। लिनक्स में 'CMAKE_SYSTEM_NAME' को सेट करने के बारे में क्या, हालांकि - अगर कुछ कॉन्फ़िगरेशन चेक की जांच करता है? –

3

क्यों आप इस android-cmake कोशिश मत करो। मैं अभी भी इस स्क्रिप्ट का उपयोग करता हूं और यह काफी अच्छी तरह से काम करता है। यदि वह दृष्टिकोण आपकी आवश्यकताओं के अनुरूप नहीं है, तो आप इसे किसी प्रेरणा के रूप में उपयोग कर सकते हैं :-)।

1

ant2009 से मूल समस्या के लिए, .cmake में निम्नलिखित लाइनों को जोड़ने के लिए एक कोशिश है कृपया:

SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot=/opt/ndk/platforms/android-23/arch-arm" CACHE STRING "" FORCE) 

SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --sysroot=/opt/ndk/platforms/android-23/arch-arm" CACHE STRING "" FORCE) 
संबंधित मुद्दे