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

编程入门 行业动态 更新时间:2024-10-17 13:27:07
本文介绍了“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屋!

更多推荐

[db:关键词]

本文发布于:2023-03-31 05:00:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/795889.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:变量   路径   命令   工具   链中

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!