aarch64-linux-android-gcc交叉编译android 64位动态库
一、准备工作
1、交叉编译工具
下载/生成android ndk,我使用的是android-ndk-r12b,平台支持从android-9到android-24
二、编译过程
1、指定编译工具链
CC_HOME=/home/waitor/tool/android-ndk-r12b
BIN_PATH=$(CC_HOME)/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/binCC=${BIN_PATH}/aarch64-linux-android-gcc
CXX=${BIN_PATH}/aarch64-linux-android-g++
AS=${BIN_PATH}/aarch64-linux-android-as
2、汇编选项
CFLAGS=-O3 -Wall -I ${CC_HOME}/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/lib/gcc/aarch64-linux-android/4.9.x/include -I ${CC_HOME}/sources/cxx-stl/system/include -I ${CC_HOME}/sources/cxx-stl/stlport/stlport --sysroot=${NDK_HOME}/platforms/android-21/arch-arm64
注:由于从android-21才开始支持arm64,所以低版本有可能不兼容。
3、链接选项
LFLAGS=--sysroot=${NDK_HOME}/platforms/android-21/arch-arm64 -lsupc++ -L $(CC_HOME)/sources/cxx-stl/gnu-libstdc++/4.9/libs/arm64-v8a
若还需要链接其他库,需要在ndk中寻找;在ndk中找不到libxxx.so时应更新ndk版本,或者自己编译好后直接动态链接。
4、编译与链接
src=test.c tool.c src.c
objs=test.o tool.o src.o
out=libtest.so#=========================
%.o: %.c$(CC) -fPIC -share $(CFLAGS) -c -o $@ $<$(out): $(objs)$(CC) $(CFLAGS) -share -fPIC $(out) $(objs) $(LFLAGS)
5、验证
对生成的%.o 和libxx.so用file命令查看
ELF 64-bit LSB relocatable, ARM aarch64, version 1 (SYSV), not stripped
可以看到生成的是64位ELF文件。
三、问题总结
1、unknown mnemonic `xxxx'
原因为目标架构不支持该汇编指令,需要手动调整汇编代码,或者重新生成汇编代码。某些框架编译时其文件目录就包含有多种架构多种指令集,如armv4、x86、x86_64、v8-armx-64、ia64等命名文件,只需要在编译时指定编译该文件即可。
aarch64-linux-android-gcc交叉编译android 64位动态库相关推荐
- Android 11中对于64位应用arm执行MTE导致crash的问题
前言 App 64位包在Android 11上crash,崩溃堆栈也很诡异,报了一个native的空指针,代码中一个函数参数为int64_t类型的指针,并且确定不为空! 分析 在仔细调试时,发现函数中 ...
- 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )
文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...
- linux内核学习之三:linux中的32位与64位
linux内核学习之三:linux中的"32位"与"64位" 在通用PC领域,不论是windows还是linux界,我们都会经常听到"32位" ...
- kali debian 安装mysql_在Kali Linux和Debian 8/9 64位上安装Wine的方法
本文介绍在Kali Linux和Debian 8/9 64位系统上安装Wine的简单方法,其它系统参考在Ubuntu 18.04/Linux Mint 19中安装Wine 4的方法. 在Kali Li ...
- Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮、代码补全等...
Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux,支持32与64位,支持各种流行编程语言的语法高亮.代码补全等-- 语法高亮.代码提示补全. ...
- XCTF-攻防世界CTF平台-Reverse逆向类——56、tar-tar-binks(Mac平台下的64位动态链接共享库.dylib逆向)
目录标题 一.解压缩 二.查看文件 三.分析程序 四.程序主要逻辑: 五.逆向思路: 步骤一: 步骤二: 六.解密代码: 题目提供了两个文件flag.tar和libarchive.dylib 一.解压 ...
- Irvine64链接库过程的使用说明 Microsoft x64 调用规范 添加Irvine64.obj 64位链接库错误及解决方法
Irvine64链接库 Crlf 向控制台写一个行结束的序列 Random64 在0到264−12^64-1264−1内,生成一个64位的伪随机整数.用rax返回值 Randomize 随机种子 Re ...
- linux系统gcc编译.c文件没有标准库解决
linux系统gcc编译.c文件没有标准库解决 现象描述 解决过程 总结 现象描述 当安装好linux系统后(比如ubuntu),通过gcc -v 查看gcc编译器版本已经是最新的了,然后gcc a. ...
- Android编译32或64位程序
★★★ 个人博客导读首页-点击此处 ★★★ 1.查看一个程序是32位还是64位: $ readelf -h tee-supplicant ELF Header: Magic: 7f 45 4c 46 ...
最新文章
- ContentProvider是如何实现数据共享的
- Python、Unicode和中文
- springboot配置内部配置类
- 显示设备不属于微型计算机的外部设备,微型计算机常用外部设备试题解析
- [SDOI2015]约数个数和
- 详解 QT 主要类 QWidget
- 中国互联网史是一部流氓史
- 远程控制篇:抓取远程屏幕图像
- PADS 管脚编号全部修改方式
- 怎么用数学绘图软件制作正方体展开动画?
- 5 个关键点!优化你的 UI 原型设计
- guid主分区表损坏如何处理_guid主分区表损坏如何处理_windows10系统硬盘分区表损坏修复教程...
- c语言赋值语句逗号,C++中赋值运算符与逗号运算符的用法详解
- 产品狗的Python之路(1):按照行数将excel表格拆分成多个
- [python] ​python-pinyin库
- 与世界对话丨预康可瘦品牌发布暨全国招商会隆重举行
- 印度人的1919乘法
- C#输入三条边判断是否为三角形
- 使用Webcam完成拍照功能
- 华中科技大学有计算机科学与技术学院导师,华中科技大学计算机科学与技术学院导师简介-徐鹏...
热门文章
- 数据分析面试题最全攻略
- 中兴管理层换血 5G时代复兴静待爆发
- 从苏宁电器到卡巴斯基第23篇:难忘的三年硕士时光 I
- c# XML反序列化 修改前缀
- apap图像全景拼接
- adams如何保存_ADAMS后处理
- 产品 电信nb接口调用_艾礼安NB—IoT产品通过中国电信物联网开放平台接入认证...
- 那个爆火的“梦中修炼”AI,你也能用Keras搭一个了
- 如果你看不懂别人画的 UML 类图,看这一篇文章就够了
- html用文本档案设置表格,phpspreadsheet 中文文档(四) 建立电子表格+档案格式