繁体   English   中英

用于CMake构建工具链中“strip”命令的Android NDK路径变量

[英]Android NDK path variable for “strip” command in CMake build tool chain

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

我知道strip命令必须与每个ABI相对应 所以,我需要调用正确的strip命令 ,为此我需要在构建期间知道它的正确路径。

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

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.")

我需要的路径如下图所示: 在此输入图像描述

所以,我的问题是:

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

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

您可以使用${CMAKE_STRIP} 使用-DCMAKE_TOOLCHAIN_FILE = android.toolchain.cmake时,它会正确设置。 如果您使用支持NDK版本的“内置”Android支持,我希望也没关系。

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

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

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脚本如下:

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原生构建系统自动考虑在内。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM