如上篇所說涯曲,使用NDK生成的獨(dú)立工具鏈可以編譯第三方庫敢靡,生成獨(dú)立工具鏈見google文檔:獨(dú)立工具鏈
下面展示了使用此腳本的示例:
$NDK/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=/tmp/my-android-toolchain
默認(rèn)情況下,構(gòu)建系統(tǒng)使用 32 位址晕、基于 ARM 的 GCC 4.8 工具鏈誊稚。不過,您可以通過將?--arch=<toolchain>?指定為選項(xiàng)來指定一個(gè)不同的值倒脓。表 3 顯示將用于其他工具鏈的值:
使用?--arch撑螺。
工具鏈值
mips64 編譯器--arch=mips64
mips GCC 4.8 編譯器--arch=mips
x86 GCC 4.8 編譯器--arch=x86
x86_64 GCC 4.8 編譯器--arch=x86_64
mips GCC 4.8 編譯器--arch=mips
下面根據(jù)生成的獨(dú)立工具鏈,來編譯我們自己的C/C++代碼并引入ndk編譯后的第三方庫崎弃。我們?yōu)楣こ虒懸粋€(gè)cmake甘晤,如下CMakeList.txt:
cmake_minimum_required(VERSION 3.5)
project(EXMAPLE)
set(CMAKE_C_STANDARD 99)
set(UPLOAD_ROOT ${PROJECT_SOURCE_DIR})
set(CMAKE_C_FLAGS? "${CMAKE_C_FLAGS} -pie -fPIE")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie -fPIE")
set(PLATFROM_BUILD_TYPE "Android")
set(TOOL_CHAIN_GCC_ROOT /tmp/ndk_tool)
message(STATUS "build ${PLATFORM} lib")
set(CMAKE_SYSTEM_NAME Android)
set(CMAKE_AR? ? ? ? ? ? ${TOOL_CHAIN_GCC_ROOT}/bin/arm-linux-androideabi-ar)
set(CMAKE_ASM_COMPILER? ${TOOL_CHAIN_GCC_ROOT}/bin/arm-linux-androideabi-as)
set(CMAKE_RANLIB? ? ? ? ${TOOL_CHAIN_GCC_ROOT}/bin/arm-linux-androideabi-ranlib)
set(CMAKE_C_COMPILER? ? ${TOOL_CHAIN_GCC_ROOT}/bin/arm-linux-androideabi-clang)
set(CMAKE_CXX_COMPILER? ${TOOL_CHAIN_GCC_ROOT}/bin/arm-linux-androideabi-clang++)
set(MDSPEECH_STRIP ${TOOL_CHAIN_GCC_ROOT}/bin/aarch64-openwrt-linux-gnu-strip)
set(CMAKE_FIND_ROOT_PATH ${TOOL_CHAIN_GCC_ROOT})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
message(STATUS "Build example demo...")
include_directories(./include ./include/libwebsockets ./include/mbedtls ./include/uv)
add_executable(example_demo ./src/network_lws.c)
target_link_libraries(example_demo?${UPLOAD_ROOT}/lib/libwebsockets.so
${UPLOAD_ROOT}/lib/libmbedtls.so
${UPLOAD_ROOT}/lib/libmbedcrypto.a
${UPLOAD_ROOT}/lib/libmbedx509.a
${UPLOAD_ROOT}/lib/libuv.so
libc.so)
message(STATUS "Build example demo done")