Android 独立工具链
cmake使用独立工具链交叉编译可在android中运行的so包
如果在mac上使用独立编译链上述链接会遇到编译错误, 需要修改CMakeLists.txt文件为如下内容
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -shared")
# Android 5.0 以上需要在此处设置 PIE
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIE")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie")
# 配置使用 NDK Standalone Toolchain 编译
set(NDK_STANDALONE_TOOLCHAIN_HOME /tmp/ndk-hm)
set(NDK_STANDALONE_TOOLCHAIN /tmp/ndk-hm/arm-linux-androideabi)
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_SYSTEM_VERSION 23)
set(CMAKE_C_COMPILER ${NDK_STANDALONE_TOOLCHAIN_HOME}/bin/clang)
set(CMAKE_CXX_COMPILER ${NDK_STANDALONE_TOOLCHAIN_HOME}/bin/clang++)
set(CMAKE_FIND_ROOT_PATH ${NDK_STANDALONE_TOOLCHAIN})
# 使用 NDK 提供的头文件
add_definitions("--sysroot=${NDK_STANDALONE_TOOLCHAIN_HOME}/sysroot")
add_library(myso SHARED CTest.c)
set_target_properties(myso
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}/lib")
include_directories(/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/include /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/include/darwin)
# include_directories(/Users/zhumingren/Library/Android/sdk/ndk-bundle/platforms/android-23/arch-arm/usr/include)
target_link_libraries(myso
log)
文件添加了NDK_STANDALONE_TOOLCHAIN_HOME变量, 添加了编译参数-shared