android-ndk cmake cross-compiling toolchain

android ndk - Construyendo una cadena de herramientas con cmake para compilación cruzada para Android



android-ndk cross-compiling (3)

¿Por qué no pruebas este android-cmake ? Todavía utilizo este script y funciona bastante bien. Si ese enfoque no se ajusta a sus necesidades, podría usarlo como una inspiración de todos modos :-).

gcc (GCC) 4.8.1 android-ndk-r9

Hola,

Mi máquina host es Fedora 19 y quiero crear una cadena de herramientas para compilar programas para que se ejecuten en Android, luego deseo extender esto para iOS.

Obtuve el siguiente error:

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

No estoy seguro de por qué recibo este error, ya que todo se ha instalado. También he instalado binutils-arm-linux-gnu . Sin embargo, esta es la primera vez que hago este tipo de cosas, así que muchos tengo algo confundido.

Estoy tratando de crear un archivo de herramientas utilizando cmake para compilar croos para ejecutar bibliotecas en un dispositivo Android.

He instalado el android-ndk-r9 en la siguiente ubicación con la ruta al compilador:

/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

Mi archivo de compilación cruzada es:

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)

Ejecuto esto desde mi directorio de compilación / depuración con mi cadena de herramientas en el directorio raíz.

[ant@localhost debug]$ cmake -DCMAKE_TOOLCHAIN_FILE=arm-eabi-gcc.cmake ../..

Salida

-- 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)

Muchas gracias de antemano,


Logré resolver el problema yendo primero a este sitio web:

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

Hay un ejemplo del uso de la cadena de herramientas independiente que viene con NDK.

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

Extraído el en mi directorio / opt.

Y usando este archivo cmake de herramientas de muestra.

# 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++)

Todo funcionó después de eso. Sin embargo, no pude hacer funcionar mi problema anterior. Tal vez he establecido algunas variables de entorno incorrectamente en los caminos equivocados.

Espero que esto ayude a alguien más.


Para el problema original de ant2009, intente agregar las siguientes líneas en .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)