我正在尝试添加一个去除调试符号我的 Android 库的步骤,其中包括不同 ABI 的本机共享库,例如x86/native-lib.so
, x86_64/native-lib.so
, arm64-v8a/native-lib.so
, etc.
我明白 strip 命令必须分别针对每个 ABI。所以,我需要调用正确的剥离命令,为此我需要在构建时知道它的正确路径。
例如,对于 ABIx86_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.")
The path I need is illustrated like below:
所以,我的问题是:
是否有现有的 CMake 变量指向此路径,即/android-ndk-r16b/toolchains/???/prebuilt/???/bin/???-???-???-strip
?
如果没有,有没有办法利用其他已知的 Android CMake 变量来形成此路径,例如ANDROID_NDK
, ANDROID_ABI
, etc?
Thanks @亚历克斯·科恩大量指出该文件android.toolchain.cmake
通常存在于目录中~/Library/Android/sdk/cmake/cmake_version_xxx/android.toolchain.cmake
在 macOS 上。
内部已经配置了许多有用的 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.")
And I 不需要明确传递任何附加参数,即DCMAKE_TOOLCHAIN_FILE=android.toolchain.cmake
,从命令行到构建过程。因为,这个文件,即android.toolchain.cmake
,已经被 Android 原生构建系统自动考虑在内。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)