前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android NDK 开发】Ubuntu 函数库交叉编译 ( Android 动态库交叉编译 | Android 静态库交叉编译 )

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

作者头像
韩曙亮
发布2023-03-27 17:58:42
9K1
发布2023-03-27 17:58:42
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

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

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

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

代码语言:javascript
复制
#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 动态库 ;

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
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 源文件 ;

代码语言:javascript
复制
#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 静态库 ;

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
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# 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • I . Ubuntu 中交叉编译 Android 动态库
      • II . Ubuntu 中交叉编译 Android 静态库
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档