【Android NDK 开发】Ubuntu 函数库交叉编译 ( Android 动态库交叉编译 | Android 静态库交叉编译 )
文章目录
- 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 静态库交叉编译 )相关推荐
- Android NDK开发之旅(2):一篇文章搞定Android Studio中使用CMake进行NDK/JNI开发
Android NDK开发之旅(2):一篇文章搞定android Studio中使用CMake进行NDK/JNI开发 (码字不易,转载请声明出处:http://blog.csdn.NET/andrex ...
- 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )
文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...
- 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )
文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )
文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )
文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...
- 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )
文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...
- Android NDK开发: 通过C/C++调用第三方so库
文章目录 一.编写so库代码 二.安装Android NDK 三.编译so库 3.1 编辑Android.mk 3.2 编辑Application.mk 3.3 编译 四.集成到Android工程中 ...
- 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 使用 addr2line 命令行工具查找动态库中的报错代码位置 )
文章目录 一.从 Tombstone 报错日志中查找报错动态库 二.addr2line 命令行工具使用 64 位动态库使用的 aarch64-linux-android-addr2line.exe 工 ...
- 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )
文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...
- OpenCV android sdk配置OpenCV android NDK开发实例
OpenCV android sdk配置OpenCV android NDK开发实例 [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/det ...
最新文章
- 谷歌2020博士生奖研金名单出炉,大陆高校无一人入选
- npm安装bower时报错 我已解决
- Vivado2018如何与Notepad++关联?
- 设置自增递增零开始_MySQL中如何设置自动递增id主键重新计数从1开始?
- linux线程一直在增加,在.net core中遇到的奇怪问题:内存与线程数一直增长
- SAP成本收集器两则
- N900超频和刷9G-home一气呵成
- poj 1195(二维树状数组)
- 【PAT甲级 十进制转十三进制】1027 Colors in Mars (20 分) Java版 5/5通过
- html鼠标响应事件吗,学习JavaScript鼠标响应事件
- 【请教】服务器上出现的两个问题!
- linux安装gd,linux下 安装GD
- Element-UI中Select选择器讲解(el-select详解)
- JAVA日常游玩-----用EnumMap优化代码。
- 激光雷达+imu_激光雷达——定位
- 解决:卸载anaconda后 cmd闪退或打不开
- 虚拟机激活win10
- c语言——求逆矩阵,伴随矩阵,行列式
- 利用IPV6实现宿舍远程连接实验室并免费上网
- 社群运营的用户画像分析有哪些方法?
热门文章
- SweetAlert2模态窗的使用
- Kubernetes-基于k8s-v1.14.2安装dashboard-1.10.1
- Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
- C primer 第六章循环 习题6.7
- C#基础——密码加密
- windowSoftInputMode属性详解
- ubuntu Ulipad 配置
- PHP、jQuery、jQueryPager结合实现Ajax分页
- Delphi 与 DirectX 之 DelphiX(95): TDIB.x
- MFC文件打开和保存