"strip"的Android NDK路径变量CMake构建工具链中的命令 [英] Android NDK path variable for "strip" command in CMake build tool chain
问题描述
我正在尝试为我的Android库添加 Strip调试符号步骤,该步骤包括适用于不同ABI的本地共享库,例如x86/native-lib.so
,x86_64/native-lib.so
,arm64-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_NDK
,ANDROID_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 指出通常在macOS上目录~/Library/Android/sdk/cmake/cmake_version_xxx/android.toolchain.cmake
中存在的文件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屋!