赞
踩
交叉编译的脚本(实测):
- #/bin/bash
-
- export ANDROID_NDK=/mnt/d/androidSDK/ndk/android-ndk-r25c-linux
-
- rm -r build
- mkdir build && cd build
-
- cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
- -DANDROID_ABI="arm64-v8a" \
- -DANDROID_TOOLCHAIN=clang++ \
- -DANDROID_NDK=$ANDROID_NDK \
- -DANDROID_PLATFORM=android-30 \
- -DCMAKE_BUILD_TYPE=debug \
- ..
-
- make && make install
-
- cd ..
我们主要使用linux平台来编译so,所以配置一些cmake参数
android-ndk-r25c-linux 指的是linux上ndk,可在android 开发者平台下载
DANDROID_ABI 是要集成的arm架构,现在的机器几乎都是64位的
DANDROID_TOOLCHAIN 默认clang++或者gcc
DANDROID_PLATFORM 表示支持的最小android平台
DCMAKE_BUILD_TYPE debug表示将so带上调试信息
CMake示例:
- cmake_minimum_required (VERSION 3.8)
- project ("myadd")
-
- INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/header)
- aux_source_directory(./src/addlib source)
-
- SET(GLOBAL_OUTPUT_HOME ${CMAKE_SOURCE_DIR})
- message("GLOBAL_OUTPUT_HOME=${GLOBAL_OUTPUT_HOME}")
-
- add_library(myadd SHARED ${source})
我们知道c++是支持函数重载的,它会将函数名全都变化掉,否则在JNA中使用就会找不到这个函数。函数名有没有变化可以通过 nm -D xxx.so来查看
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。