Building a toolchain with cmake to cross-compile for android

后端 未结 4 1019
后悔当初
后悔当初 2020-12-23 22:45
gcc (GCC) 4.8.1 
android-ndk-r9 

Hello,

My host machine is Fedora 19 and I want to create a tool-chain for compiling programs

相关标签:
4条回答
  • 2020-12-23 23:02

    I managed to solve the problem by first going to this website:

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

    There is an example of using the standalone toolchain that comes with NDK.

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

    Extracted the into my /opt directory.

    And using this sample toolchain cmake file

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

    Everything just worked after that. However, I couldn't get my previous problem working. Maybe I have set some environmental variables incorrectly to the wrong paths.

    Hope this helps someone else.

    0 讨论(0)
  • 2020-12-23 23:04

    For original problem from ant2009, please have a try to add following lines in .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)
    
    0 讨论(0)
  • 2020-12-23 23:10

    Why you don't try this android-cmake. I still use this script and it works fairly well. If that approach does not fit your needs, you could use it as an inspiration anyway :-) .

    0 讨论(0)
  • 2020-12-23 23:23

    In 2020 the make-standalone-toolchain.sh approach is deprecated.

    This is an updated CMakeList.txt:

    set(CMAKE_SYSTEM_NAME Android)
    set(CMAKE_SYSTEM_VERSION 24)
    set(CMAKE_ANDROID_ARCH_ABI arm64-v8a)
    
    PROJECT(mylib C)
    CMAKE_MINIMUM_REQUIRED(VERSION 3.18.0)
    
    SET( ${PROJECT_NAME}_CURRENT 1 )
    SET( ${PROJECT_NAME}_REVISION 0 )
    SET( ${PROJECT_NAME}_AGE 0 )
    SET(VERSION "${${PROJECT_NAME}_CURRENT}.${${PROJECT_NAME}_REVISION}.${${PROJECT_NAME}_AGE}")
    
    
    SET(SOURCES foobar.c)
    ADD_LIBRARY(mylib SHARED ${SOURCES})
    
    

    NOTE: For the ABI arm64-v8a CMake 3.18 is needed to detect the NDK toolchain correctly, 3.10 which is the version in Ubuntu 18.04, does not find the toolchain.

    0 讨论(0)
提交回复
热议问题