26 Linux中通过Shell编译动态库.so和静态库.a

153 阅读1分钟

Android Ndk 学习笔记(目录)

// 获取 NDK 的 gcc 
export NDK_GCC="/home/xinyonghu/ndk/tools/android-ndk-r17c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-gcc"

export NDK_GCC_32="/home/xinyonghu/ndk/tools/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc"

// 编译 Android 可执行的 exe 文件
$NDK_GCC main.c -o mainNDKEXE

//寻库文件头文件
/home/xinyonghu/ndk/tools/android-ndk-r17c/platforms/android-21/arch-arm64
/home/xinyonghu/ndk/tools/android-ndk-r17c/platforms/android-21/arch-arm

//寻找头文件
/home/xinyonghu/ndk/tools/android-ndk-r17c/sysroot/usr/include
/home/xinyonghu/ndk/tools/android-ndk-r17c/sysroot/usr/include

//C运行期 寻找asm
/home/xinyonghu/ndk/tools/android-ndk-r17c/sysroot/usr/include/aarch64-linux-android
/home/xinyonghu/ndk/tools/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi


【--sysroot=路径(自动寻找 头文件,库文件 .h/.a/.so)】
【-isystem 路径(自动寻找 头文件)】
//中间是英文空格 切不能换行

export OTHER="--sysroot=/home/xinyonghu/ndk/tools/android-ndk-r17c/platforms/android-21/arch-arm64 -isystem /home/xinyonghu/ndk/tools/android-ndk-r17c/sysroot/usr/include -isystem /home/xinyonghu/ndk/tools/android-ndk-r17c/sysroot/usr/include/aarch64-linux-android"

export OTHER32="--sysroot=/home/xinyonghu/ndk/tools/android-ndk-r17c/platforms/android-21/arch-arm -isystem /home/xinyonghu/ndk/tools/android-ndk-r17c/sysroot/usr/include -isystem /home/xinyonghu/ndk/tools/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi"

$NDK_GCC $OTHER main.c -o mainNDKEXE


$NDK_GCC -pie $AAA main.c -o mainNDKEXE

在这里插入图片描述

生成动态库 libgetndk.so
$NDK_GCC $OTHER -fPIC -shared get.c -o libgetndk.so
$NDK_GCC_32 $OTHER32 -fPIC -shared get.c -o libgetndk.so

在这里插入图片描述

export NDK_AR_ARM64="/home/xinyonghu/ndk/tools/android-ndk-r17c/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-ar"

export NDK_AR_ARM32="/home/xinyonghu/ndk/tools/android-ndk-r17c/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ar"
Linux服务器可以用的 静态库:
第一步:必须有目标文件 xxx.o
第一步:必须使用NDK交叉编译 打出 xxx.o
$NDK_GCC $OTHER -fPIC -c get.c -o getndk.o
$NDK_GCC_32 $OTHER32 -fPIC -c get.c -o getndk.o
第二步:编译静态库即可
$NDK_AR_ARM64 rcs libgetndk.a getndk.o
$NDK_AR_ARM32 rcs libgetndk.a getndk.o

在这里插入图片描述
在这里插入图片描述