gpt4 book ai didi

android - 运行 add_qt_android_apk 时,CMake Android 工具链无法为 arm 找到 strip 命令

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:07 24 4
gpt4 key购买 nike

在我的 CMake 项目中,我使用 android.toolchain.cmake。

我按定义传递了以下环境变量:

export ANDROID_ABI="armeabi-v7a" # x86
export ANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.9" # "x86-4.9"
export ANDROID_API_LEVEL="23"
export QT_DIR="$HOME/Qt/5.7/android_armv7"
export ANDROID_STANDALONE_TOOLCHAIN="$HOME/android-ndk-r12b/toolchains/arm-linux-androideabi-4.9/"
export ANDROID_PREFIX="sdk-android-armv7" # sdk-android-x86
export ANDROID_TARGET="armv7" # x86
export QTAV_LIB_DIR="lib_android_arm" # lib_android_x86

我通过以下方式传递变量:

cmake -DUSE_COMPRESSED_FILES=1 -DJAVA_HOME="/usr/java/default/" -DANDROID_SDK="$ANDROID_HOME" -DQT_ANDROID_SDK_ROOT="$ANDROID_HOME" -DQT_ANDROID_ANT="$ANT_PATH" -DCMAKE_MODULE_PATH="../cmake" -DCMAKE_PREFIX_PATH="$QT_DIR/lib/cmake" -DCMAKE_TOOLCHAIN_FILE=../cmake/android.toolchain.cmake -DANDROID_NDK="$HOME/android-ndk-r12b" -DCMAKE_BUILD_TYPE=Debug -DANDROID_ABI="$ANDROID_ABI" -DANDROID_TOOLCHAIN_NAME="$ANDROID_TOOLCHAIN_NAME" -DANDROID_STANDALONE_TOOLCHAIN="$ANDROID_STANDALONE_TOOLCHAIN" -DANDROID_NATIVE_API_LEVEL="$ANDROID_API_LEVEL" -DQT_DIR="$QT_DIR" -DANDROID_PREFIX="$ANDROID_PREFIX" -DANDROID_TARGET="$ANDROID_TARGET" -DQTAV_LIB_DIR="$QTAV_LIB_DIR" ../

cmake --build .

当“剥离库以最小化大小”时。它说:命令不存在:/home/peter/android-ndk-r12b/toolchains/armeabi-v7a-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip

路径应该是“arm-linux-androideabi-4.9”而不是“armeabi-v7a-4.9”。为什么使用 ANDROID_ABI 而不是 ANDROID_TOOLCHAIN_NAME?

我在 x86 上没有这些问题:

export ANDROID_ABI="x86"
export ANDROID_TOOLCHAIN_NAME="x86-4.9"
export ANDROID_API_LEVEL="23"
export QT_DIR="$HOME/Qt5.7.0/5.7/android_x86"
export ANDROID_STANDALONE_TOOLCHAIN="$HOME/android-ndk-r12b/toolchains/x86-4.9/"
export ANDROID_PREFIX="sdk-android-x86"
export ANDROID_TARGET="x86"
export QTAV_LIB_DIR="lib_android_x86"

编辑:strip命令由android.toolchain.cmake文件设置:

 set( CMAKE_STRIP        "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}"   CACHE PATH "strip" )

ANDROID_TOOLCHAIN_ROOT 是这样设置的,因为我指定了 NDK 路径:

# setup paths and STL for NDK
if( BUILD_WITH_ANDROID_NDK )
set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}${ANDROID_NDK_TOOLCHAINS_SUBPATH}" )

所以我猜 ANDROID_GCC_TOOLCHAIN_NAME 一定是错的? ANDROID_NDK_TOOLCHAINS_SUBPATH 以“prebuilt”开头,所以它是正确的。 ANDROID_NDK_TOOLCHAINS_PATH 以“工具链”结尾,所以它也是正确的。

如果它不是 Clang(它不是),则设置 ANDROID_GCC_TOOLCHAIN_NAME:

set( ANDROID_GCC_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" )

所以一切都应该正常工作,因为我的 ANDROID_TOOLCHAIN_NAME 已在上面指定为“arm-linux-androideabi-4.9”,但事实并非如此。

编辑2:

ANDROID_ABI 是替代使用的值。据我在文件“android.toolchain.cmake”中看到的那样,它从未在任何 strip 路径中使用过,但它的值也被复制到 ANDROID_NDK_ABI_NAME 中,它既不用于任何 strip 路径。

编辑3:这可能是 AddQtAndroidApk.cmake 中的错误而不是工具链中的错误,因为输出实际上是:

Stripping libraries to minimize size.
Command does not exist: /home/peter/android-ndk-r12b/toolchains/armeabi-v7a-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip
CMakeFiles/my_app_apk.dir/build.make:60: recipe for target 'run_android_deploy_qt' failed

最佳答案

不知何故,文件 qtdeploy.json.in 得到了错误的条目

"toolchain-prefix": "@ANDROID_ABI@",

这对于 x86 来说没有问题。当然应该是:

 "toolchain-prefix": "@ANDROID_TOOLCHAIN_MACHINE_NAME@",

此外,我删除了不必要的语句设置“ANDROID_STANDALONE_TOOLCHAIN”。我使用

获得了必要的信息
cmake -DCMAKE_VERBOSE_MAKEFILE=on ...
make VERBOSE=1

并查看 Qt CMake 包。

关于android - 运行 add_qt_android_apk 时,CMake Android 工具链无法为 arm 找到 strip 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39885415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com