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

时间:2018-11-21 09:59:28

标签: android cmake android-ndk

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

我知道,剥离命令必须与每个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.")

我需要的路径如下图所示: enter image description here

所以,我的问题是:

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用${CMAKE_STRIP}。当您使用 -DCMAKE_TOOLCHAIN_FILE = android.toolchain.cmake 时,将对其进行适当设置。我希望如果您使用受支持的NDK版本的“内置” Android支持也可以。

答案 1 :(得分:2)

非常感谢 @Alex Cohn 指出文件foreach,该文件通常存在于macOS的目录foreach ($parent_ids as $key => $value) { $db_uid = $value->uid; $parent_id = $value->parent_id; $email_of = $value->email_of; return $email_of; } 中。

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

$email_of = $value['email_of']

一个 android.toolchain.cmake 正是我想要的,所以我的最终CMake脚本如下:

~/Library/Android/sdk/cmake/cmake_version_xxx/android.toolchain.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)已被Android本机构建系统自动考虑在内。