如果您想使用 NDK 中的交叉编译工具链,编译一个 C++ 文件,您需要以下几个步骤:
- 下载并安装 Android NDK,您可以从 Android 开发者网站 获取最新版本。
- 使用 NDK 中的 make_standalone_toolchain.py 脚本创建一个自定义的工具链,您可以指定目标 ABI、API 级别、工具链类型等参数。例如,要为 armeabi-v7a 架构创建一个基于 Clang 的工具链,您可以运行以下命令:
$ python make_standalone_toolchain.py --arch arm --api 21 --install-dir /tmp/my-android-toolchain
如果您想创建一个基于 arm64 的 Linux 的工具链,您可以使用以下命令:
$ python make_standalone_toolchain.py --arch arm64 --api 21 --install-dir /tmp/my-android-toolchain
这个命令会为 arm64 架构创建一个基于 Clang 的工具链,并将其安装在 /tmp/my-android-toolchain 目录下。您可以指定不同的 API 级别和安装目录,以满足您的需求。
username@root:~/Andriod_NDK/android-ndk-r26b-linux/android-ndk-r26b/build/tools$ python make_standalone_toolchain.py --arch arm64 --api 21 --install-dir /tmp/my-android-toolchain
WARNING:__main__:make_standalone_toolchain.py is no longer necessary.
The $NDK/toolchains/llvm/prebuilt/linux-x86_64/bin directory contains target-specific scripts that perform the same task. For example, instead of: $ python $NDK/build/tools/make_standalone_toolchain.py \ --arch arm64 --api 21 --install-dir toolchain $ toolchain/bin/clang++ src.cpp Instead use: $ $NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++ src.cpp
这个提示的意思是,您使用的 make_standalone_toolchain.py 脚本已经不再需要了,因为 NDK 中已经提供了一些目标平台相关的脚本,可以直接使用,而不需要创建一个单独的工具链。
这些脚本位于 $NDK/toolchains/llvm/prebuilt/linux-x86_64/bin 目录中,您可以根据您的目标架构和 API 级别选择合适的脚本。例如,如果您想为 arm64 架构和 API 21 的平台编译一个 C++ 文件,您可以直接使用 aarch64-linux-android21-clang++ 脚本,而不需要先运行 make_standalone_toolchain.py 脚本。这样可以节省您的时间和空间,也可以避免一些潜在的问题。
- 设置环境变量,使您的终端能够找到工具链中的编译器和链接器。例如,要将工具链添加到 PATH 中,您可以运行以下命令:
$ export PATH=/tmp/my-android-toolchain/bin:$PATH
- 使用工具链中的编译器和链接器编译您的 C++ 文件。例如,要编译一个名为 hello.cpp 的文件,您可以运行以下命令:
$ arm-linux-androideabi-clang++ hello.cpp -o hello
如果没有设置环境变量,可以补全工具链前面的路径,然后编译:
iigh@GH-323:~/Andriod_NDK/android-ndk-r26b-linux/test$ /home/iiu4sgh/Andriod_NDK/android-ndk-r26b-linux/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android21-clang++ hello.cpp -o hello
上图使用了aarch64-linux-android21-clang++这个交叉编译工具链,编译了一个c++文件。
- 将编译后的可执行文件复制到您的 Android 设备或模拟器中,并在终端中运行它。例如,要使用 adb 工具将文件复制到 /data/local/tmp 目录中,并赋予可执行权限,您可以运行以下命令:
$ adb push hello /data/local/tmp
$ adb shell chmod 755 /data/local/tmp/hello
$ adb shell /data/local/tmp/hello
以上就是使用 NDK 中的交叉编译工具链,编译一个 C++ 文件的基本步骤。
如果您想了解更多细节和选项,请参考: