“strip"的 Android NDK 路径变量CMake 构建工具链中的命令 [英] Android NDK path variable for "strip" command in CMake build tool chain

查看:18
本文介绍了“strip"的 Android NDK 路径变量CMake 构建工具链中的命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为我的 Android 库添加一个 strip debug symbols 步骤,其中包括用于不同 ABI 的本机共享库,例如x86/native-lib.sox86_64/native-lib.soarm64-v8a/native-lib.so

I am trying to add a strip debug symbols step for my Android library which includes native shared libraries for different ABIs, e.g. x86/native-lib.so, x86_64/native-lib.so, arm64-v8a/native-lib.so, etc.

我了解 strip 命令必须分别对应于每个 ABI.因此,我需要调用正确的 strip 命令,为此我需要在构建期间知道它的正确路径.

I understand that the strip command must be respective to each ABI. So, I need to invoke the correct strip command, for which I need to know its correct path during build time.

例如,对于 ABI x86_64,我需要有以下路径设置:

For example, for ABI x86_64, I need to have below path setting:

set(STRIP ~/Library/Android/android-ndk-r16b/toolchains/x86_64-4.9/prebuilt/darwin-x86_64/bin/x86_64-linux-android-strip)

add_custom_command(TARGET ${SHARED_LIBRARY_NAME} POST_BUILD
                COMMAND ${STRIP}
                "${DIST_LIBS_DIR}/${LIB_BUILD_TYPE}/${ANDROID_ABI}/lib${SHARED_LIBRARY_NAME}.so"
                COMMENT "Strip debug symbols done on final binary.")

我需要的路径如下图所示:

The path I need is illustrated like below:

所以,我的问题是:

  • 是否存在指向此路径的现有 CMake 变量,即 /android-ndk-r16b/toolchains/???/prebuilt/???/bin/???-???-???-strip?

如果没有,有没有办法利用其他已知的 Android CMake 变量来形成这条路径,例如ANDROID_NDKANDROID_ABI 等?

If not, is there a way to form this path utilising other known Android CMake variable, e.g. ANDROID_NDK, ANDROID_ABI, etc?

推荐答案

非常感谢 @Alex Cohn 指出通常存在的文件 android.toolchain.cmake在 macOS 上的目录 ~/Library/Android/sdk/cmake/cmake_version_xxx/android.toolchain.cmake.

Thanks @Alex Cohn a lot for pointing out the file android.toolchain.cmake which usually exists at directory ~/Library/Android/sdk/cmake/cmake_version_xxx/android.toolchain.cmake on macOS.

内部已经配置了许多有用的 Android CMake 变量,例如

There are many useful Android CMake variables already configured inside, e.g.

ANDROID_NDK
ANDROID_TOOLCHAIN
ANDROID_ABI
ANDROID_PLATFORM
ANDROID_STL
ANDROID_PIE
ANDROID_CPP_FEATURES
ANDROID_ALLOW_UNDEFINED_SYMBOLS
ANDROID_ARM_MODE
ANDROID_ARM_NEON
ANDROID_DISABLE_NO_EXECUTE
ANDROID_DISABLE_RELRO
ANDROID_DISABLE_FORMAT_STRING_CHECKS
ANDROID_CCACHE

ANDROID_TOOLCHAIN_PREFIX 正是我要找的,所以我的最终 CMake 脚本如下:

And the one ANDROID_TOOLCHAIN_PREFIX is exactly what I looked for, so my final CMake script comes into below:

add_custom_command(TARGET ${SHARED_LIBRARY_NAME} POST_BUILD
            COMMAND "${ANDROID_TOOLCHAIN_PREFIX}strip" -g -S -d --strip-debug --verbose
            "${DIST_LIBS_DIR}/${LIB_BUILD_TYPE}/${ANDROID_ABI}/lib${SHARED_LIBRARY_NAME}.so"
            COMMENT "Strip debug symbols done on final binary.")

而且我不需要明确从命令行向构建过程传递任何其他参数,即 DCMAKE_TOOLCHAIN_FILE=android.toolchain.cmake.因为,这个文件,即android.toolchain.cmake,已经被Android原生构建系统自动考虑进去了.

And I don't need to explicitly pass any additional arguments, i.e. DCMAKE_TOOLCHAIN_FILE=android.toolchain.cmake, from command line to the build process. Because, this file, i.e. android.toolchain.cmake, was already taken into account automatically by Android native build system.

这篇关于“strip"的 Android NDK 路径变量CMake 构建工具链中的命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆