文章目录

  • I . Ubuntu 中交叉编译 Android 动态库
  • II . Ubuntu 中交叉编译 Android 静态库

I . Ubuntu 中交叉编译 Android 动态库


1 . 要编译的源文件 : add.c 源文件 ;

#include <stdio.h>int add(int a, int b){return a + b;
}

2 . 共享动态库编译参数 : 编译动态库需要添加 “-fPIC” 和 “-shared” 两个参数 ;

3 . 编译命令 :

① 设置 编译器 临时环境变量 :

export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc

② 设置指定 头文件和函数库 的临时环境变量 :

export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"

③ 最终命令 :

$CC $HEAD_LIB -fPIC -shared add.c -o libadd.so

4 . 编译结果 : 在该目录下生成了 libadd.so 动态库 ;

root@octopus:~/NDK/001_Compile# ls
add.c
root@octopus:~/NDK/001_Compile# export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile# export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile# $CC $HEAD_LIB -fPIC -shared add.c -o libadd.so
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile# ls
add.c  libadd.so
root@octopus:~/NDK/001_Compile#

目录中的 libadd.so 就是编译完成的动态库 , 该动态库可以放到 Android Studio 项目中使用 ;

II . Ubuntu 中交叉编译 Android 静态库


1 . 要编译的源文件 : add.c 源文件 ;

#include <stdio.h>int add(int a, int b){return a + b;
}

2 . 共享动态库编译参数 : 编译动态库需要添加 “-fPIC” 参数 , 先输出 .o 文件 , 然后 根据 .o 文化生成 静态库 ;

3 . 编译命令 :

① 设置 arm-linux-androideabi-gcc 交叉编译器 临时环境变量 : 用于生成 .o 文件 ;

export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc

② 设置 arm-linux-androideabi-ar 工具 临时环境变量 : 使用 .o 文件生成静态库 ;

export AR=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar

② 设置指定 头文件和函数库 的临时环境变量 :

export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"

③ 最终命令 :

$CC $HEAD_LIB -fPIC -c add.c -o add.o

$AR r libadd.a add.o

4 . 编译结果 : 在该目录下生成了 libadd.a 静态库 ;

root@octopus:~/NDK/001_Compile# ls
add.c  libadd.so
root@octopus:~/NDK/001_Compile# export CC=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile# export AR=/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile# export HEAD_LIB="--sysroot=/root/NDK/android-ndk-r17c/platforms/android-21/arch-arm -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include -isystem /root/NDK/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile# $CC $HEAD_LIB -fPIC -c add.c -o add.o
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile# $AR r libadd.a add.o
/root/NDK/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar: creating libadd.a
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile# ls
add.c  add.o  libadd.a  libadd.so
root@octopus:~/NDK/001_Compile#
root@octopus:~/NDK/001_Compile#

【Android NDK 开发】Ubuntu 函数库交叉编译 ( Android 动态库交叉编译 | Android 静态库交叉编译 )相关推荐

  1. Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发

    Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...

  2. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...

  3. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  4. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  5. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  6. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  7. Android NDK开发: 通过C/C++调用第三方so库

    文章目录 一.编写so库代码 二.安装Android NDK 三.编译so库 3.1 编辑Android.mk 3.2 编辑Application.mk 3.3 编译 四.集成到Android工程中 ...

  8. 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 使用 addr2line 命令行工具查找动态库中的报错代码位置 )

    文章目录 一.从 Tombstone 报错日志中查找报错动态库 二.addr2line 命令行工具使用 64 位动态库使用的 aarch64-linux-android-addr2line.exe 工 ...

  9. 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )

    文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...

  10. OpenCV android sdk配置OpenCV android NDK开发实例

    OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...

最新文章

  1. 谷歌2020博士生奖研金名单出炉,大陆高校无一人入选
  2. npm安装bower时报错 我已解决
  3. Vivado2018如何与Notepad++关联?
  4. 设置自增递增零开始_MySQL中如何设置自动递增id主键重新计数从1开始?
  5. linux线程一直在增加,在.net core中遇到的奇怪问题:内存与线程数一直增长
  6. SAP成本收集器两则
  7. N900超频和刷9G-home一气呵成
  8. poj 1195(二维树状数组)
  9. 【PAT甲级 十进制转十三进制】1027 Colors in Mars (20 分) Java版 5/5通过
  10. html鼠标响应事件吗,学习JavaScript鼠标响应事件
  11. 【请教】服务器上出现的两个问题!
  12. linux安装gd,linux下 安装GD
  13. Element-UI中Select选择器讲解(el-select详解)
  14. JAVA日常游玩-----用EnumMap优化代码。
  15. 激光雷达+imu_激光雷达——定位
  16. 解决:卸载anaconda后 cmd闪退或打不开
  17. 虚拟机激活win10
  18. c语言——求逆矩阵,伴随矩阵,行列式
  19. 利用IPV6实现宿舍远程连接实验室并免费上网
  20. 社群运营的用户画像分析有哪些方法?

热门文章

  1. SweetAlert2模态窗的使用
  2. Kubernetes-基于k8s-v1.14.2安装dashboard-1.10.1
  3. Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
  4. C primer 第六章循环 习题6.7
  5. C#基础——密码加密
  6. windowSoftInputMode属性详解
  7. ubuntu Ulipad 配置
  8. PHP、jQuery、jQueryPager结合实现Ajax分页
  9. Delphi 与 DirectX 之 DelphiX(95): TDIB.x
  10. MFC文件打开和保存