Переменная пути Android NDK для команды "strip" в цепочке инструментов сборки CMake - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь добавить шаг символов отладки полосы для моей библиотеки Android, которая включает собственные общие библиотеки для различных ABI, например, x86/native-lib.so, x86_64/native-lib.so, arm64-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.")

Нужный путь проиллюстрирован, как показано ниже: enter image description here

Итак, мои вопросы:

  • Существует ли существующая переменная CMake, указывающая на этот путь, то есть /android-ndk-r16b/toolchains/???/prebuilt/???/bin/???-???-???-strip?

  • Если нет, есть ли способ сформировать этот путь, используя другую известную переменную Android CMake, например, ANDROID_NDK, ANDROID_ABI и т. Д.?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Спасибо @ Alex Cohn большое за указание на файл android.toolchain.cmake, который обычно существует в каталоге ~/Library/Android/sdk/cmake/cmake_version_xxx/android.toolchain.cmake в macOS.

Есть много полезных переменных CMake для Android, уже настроенных внутри, например,

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.

0 голосов
/ 21 ноября 2018

Вы можете использовать ${CMAKE_STRIP}.Он устанавливается соответствующим образом при использовании -DCMAKE_TOOLCHAIN_FILE = android.toolchain.cmake .Я надеюсь, что это нормально, если вы работаете со встроенной поддержкой Android с поддерживаемой версией NDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...