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

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

问题描述

我正在尝试为我的 Android 库添加一个条带调试符号步骤,其中包括用于不同 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.

我了解剥离命令必须针对每个 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在目录 ~/Library/Android/sdk/cmake/cmake_version_xxx/android.toolchain.cmake 在 macOS 上.

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天全站免登陆