我是靠谱客的博主 闪闪小兔子,最近开发中收集的这篇文章主要介绍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/bin

CC=${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位动态库的全部内容,希望文章能够帮你解决aarch64-linux-android-gcc交叉编译android 64位动态库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(84)

评论列表共有 0 条评论

立即
投稿
返回
顶部