Android 平台如何编译执行 C/C++ 可执行程序
我们直接看一个示例:
写一个 helloworld c++ 可执行程序:
main.c:
# include <iostream>
int main(int argc, char const *argv[])
{
for(int i = 0; i < 5; ++i)
std::cout << "Hello World" << std::endl;
return 0;
}
Android 平台通常使用 CMake 调用 NDK 工具链编译 C/C++ 代码,具体地:
写 CMakeLists.txt: google 给了两种方式用于支持 CMake 调用 NDK 工具链编译 C/C++ 代码, 一种是 CMake的内置支持 (opens new window),需要 CMake 版本 >= 3.21,NDK 版本需要大于 r23,是未来的主流。 一种是通过工具链文件支持 (opens new window),是当前的主流。Android Gradle 插件使用的是 NDK 的工具链文件。
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(main)
add_executable(${PROJECT_NAME} main.cpp )
编译脚本 build.sh:
rm -r build
mkdir build && cd build
cmake
-DCMAKE_TOOLCHAIN_FILE=/root/ndk/android-ndk-r20b/build/cmake/android.toolchain.cmake
-DANDROID_ABI=arm64-v8a
-DANDROID_PLATFORM=android-29
-DANDROID_STL=c++_shared -S .
cmake --build .
在模拟器上执行我们的程序:
# 编译程序
chmod +x build.sh
./build.sh
# 打开模拟器,流程略
# 上传可执行文件
adb push build/main /data/local/tmp
# 上传 STL 动态库
adb push 你的ndk完整路径/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android/libc++_shared.so /data/local/tmp
# 进入到模拟器 shell
adb shell
# 执行程序
cd /data/local/tmp
export LD_LIBRARY_PATH=/data/local/tmp && ./main