当前位置:   article > 正文

Android 交叉编译so

android 交叉编译

交叉编译的脚本(实测):

  1. #/bin/bash
  2. export ANDROID_NDK=/mnt/d/androidSDK/ndk/android-ndk-r25c-linux
  3. rm -r build
  4. mkdir build && cd build
  5. cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
  6. -DANDROID_ABI="arm64-v8a" \
  7. -DANDROID_TOOLCHAIN=clang++ \
  8. -DANDROID_NDK=$ANDROID_NDK \
  9. -DANDROID_PLATFORM=android-30 \
  10. -DCMAKE_BUILD_TYPE=debug \
  11. ..
  12. make && make install
  13. 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示例:

  1. cmake_minimum_required (VERSION 3.8)
  2. project ("myadd")
  3. INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/header)
  4. aux_source_directory(./src/addlib source)
  5. SET(GLOBAL_OUTPUT_HOME ${CMAKE_SOURCE_DIR})
  6. message("GLOBAL_OUTPUT_HOME=${GLOBAL_OUTPUT_HOME}")
  7. add_library(myadd SHARED ${source})

头文件记得 extern “C”

我们知道c++是支持函数重载的,它会将函数名全都变化掉,否则在JNA中使用就会找不到这个函数。函数名有没有变化可以通过 nm -D xxx.so来查看

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/573170
推荐阅读
相关标签
  

闽ICP备14008679号