安卓系统本质上是一个基于linux内核的系统,所以是可以运行C、C++程序。
选择合适的自己想要的ndk版本,本文采用android-ndk-r21e,页面找不到对应的版本就去网页底部的不受支持的旧版本处下载对应的版本。
Platform | Package | Size (bytes) | SHA1 Checksum |
---|---|---|---|
Linux | android-ndk-r21e-linux-x86_64.zip | 1190670072 | c3ebc83c96a4d7f539bd72c241b2be9dcd29bda9 |
2、解压开发包压缩文件
unzip android-ndk-r21e-linux-x86_64.zip
3、安装开发环境
方法一:键入命令
cd android-ndk-r21e/build/tools
./make-standalone-toolchain.sh --platform=android-30 --install-dir=$install_dir --toolchain=aarch64-linux-android-4.9 --arch=arm64
方法二:shell脚本
#本脚本用ndk编译android linux系统交叉编译工具链
DIR="$( cd "$( dirname "${
BASH_SOURCE[0]}" )" && pwd )"
echo "DIR: $DIR"
install_dir=$DIR/android-30-toolchain/
echo "install_dir: $install_dir"
ndk_dir=$DIR/android-ndk-r21e
echo "ndk_dir: $ndk_dir"
cd $ndk_dir/build/tools
./make-standalone-toolchain.sh --platform=android-30 --install-dir=$install_dir --toolchain=aarch64-linux-android-4.9 --arch=arm64
4、添加环境变量
采用shell脚本来执行,每次需要用到该环境变量执行一次脚本就可以,不用每次都手动敲很多命令。
//示例代码,不能直接用
cur_dir=$PWD
dev_dir="$( cd "$( dirname "${
BASH_SOURCE[0]}" )" && pwd )"
cd $dev_dir
ANDROID_NDK_ROOT=$dev_dir/android-ndk-r21e
export ANDROID_NDK_ROOT
arch=aarch64
host=aarch64-linux
cross_compiler=aarch64-linux-android-
export arch cross_compiler host
TOOLCHAIN_DIR=$dev_dir/android-21-toolchain
cd $TOOLCHAIN_DIR
COMPILER_PATH=${TOOLCHAIN_DIR}/bin
CC=${cross_compiler}gcc
CXX=${cross_compiler}g++
RANLIB=${cross_compiler}ranlib
STRIP=${cross_compiler}strip
LD=${cross_compiler}ld
GDB=${cross_compiler}gdb
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$TOOLCHAIN_DIR:$COMPILER_PATH:$ANDROID_NDK_ROOT"
export PATH
export CC CXX RANLIB STRIP LD
rootfs_dir=$TOOLCHAIN_DIR/sysroot
kernel_ver_info_file=$TOOLCHAIN_DIR/kernel_ver.info
rootfs_ver_info_file=$TOOLCHAIN_DIR/rootfs_ver.info
export rootfs_dir rootfs_ver_info_file kernel_ver_info_file
SYSROOT=$rootfs_dir
export SYSROOT
cd $cur_dir
5、编译C/C++代码
5.1.编写测试代码
编写测试代码test.cpp
扫描二维码关注公众号,回复:
14271831 查看本文章

#include <iostream>
using namespace std;
int main() {
cout << "hello Android!" << endl;
return 0
}
5.2.生成可执行程序
在Android 4.4之后添加了新的保护机制,可执行文件必须是采用PIE编译的。
编译时添加-pie -fPIE
export PATH=~/ndktest/ndk/bin/:$PATH
aarch64-linux-android-g++ test.cpp -o test -pie -fPIE
5.3.运行C/C++程序
将生成好的可执行程序上传至安卓设备.
可通过file
命令查看可执行文件类型
file a.out
a.out: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /system/bin/linker64, with debug_info, not stripped