运行add_qt_Android_apk时,CMake Android工具链找不到arm的strip命令
strip command cannot be found by CMake Android toolchain for arm when running add_qt_android_apk
在我的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 .
当"剥离库以最小化大小"时,它说:Command does not exist: /home/peter/android-ndk-r12b/toolchains/armeabi-v7a-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip
路径应该是"arm-linux-androidabi-4.9",而不是"armabi-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以"预构建"开头,因此它是正确的。ANDROID_NDK_TOOLCHAINS_PATH以"工具链"结尾,因此它也是正确的。
如果ANDROID_GCC_TOOLCHAIN_NAME不是Clang(它不是Clang(,则设置:
set( ANDROID_GCC_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" )
所以一切都应该正常,因为我的ANDROID_TOOLCHAIN_NAME在上面被指定为"arm-linux-androidabi-4.9",但它没有。
第2版:
ANDROID_ABI是所使用的值。据我在文件"android.toolchain.cmake"中看到的,它从未在任何条带路径中使用过,但它的值也被复制到android_NDK_ABI_NAME,它也不用于任何条带。
第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软件包。
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- Android Studio 3.5.1 和 NDK 20.0 找不到 cstdint
- Visual Studio共享库(Android,iOS)标题在Mac上找不到
- CMake 编译器测试在 Android 中找不到包含目录
- Android Studio 找不到 Boost 标头
- Android找不到我的JNI原生库函数
- Android NDK OpenCV - 找不到本机的实现
- Android 构建工具链找不到/缺少 STL 标头目录
- CMake 在使用 android-cmake 工具链文件时找不到 Boost 库
- OpenCV for Android:在 PATH 中找不到错误程序"sh"
- 为android编译SDL时找不到ifaddrs.h标头
- Cocos2d-x Android 构建找不到扩展
- 运行add_qt_Android_apk时,CMake Android工具链找不到arm的strip命令
- Android NDK链接V8静态库:找不到符号,但它们在那里
- 在 Eclipse 上安装 OpenCV for Android 的问题:各种错误,包括"在 PATH 中找不到"
- Android / GDB -头痛-找不到调试符号
- 适用于Android的Qt找不到任何兼容的设备答案找到但不知道如何
- Android 找不到 ndk 方法的缺陷