AddQtAndroidApk检测到错误的目标体系结构
AddQtAndroidApk detects wrong target architecture
为了使用CMake部署用C++编写的Qt应用程序,我使用了两个CMake模块:https://github.com/taka-no-me/android-cmake
https://github.com/LaurentGomila/qt-android-cmake/
首先,我必须手动添加一个include路径,否则编译失败:"android-ndk-r12b/sources/android/native_app_glue/">
现在,一切都可以用Android的Qt二进制版本编译。我使用以下命令创建一个带有Qt二进制文件的APK:
if (ANDROID)
add_qt_android_apk(my_app_apk fairyland)
endif ()
编译工作,但构建包失败:
Generating Android Package
Input file: /home/me/Dokumente/Projekte/fairytale/buildandroid/qtdeploy.json
Output directory: /home/me/Dokumente/Projekte/fairytale/buildandroid/
Application binary: /home/me/Dokumente/Projekte/fairytale/buildandroid/libfairyland.so
Android build platform: android-24
Install to device: No
Copying Android package template.
-- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/AndroidManifest.xml
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/templates/build.gradle. Same or newer file already in place.
-- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/res/values/libs.xml
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/layout/splash.xml. Same or newer file already in place.
-- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/res/values/strings.xml
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-de/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-el/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-es/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-et/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-fa/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-fr/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-id/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-it/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-ja/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-ms/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-nb/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-nl/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-pl/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-pt-rBR/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-ro/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-rs/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-ru/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-zh-rCN/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/res/values-zh-rTW/strings.xml. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/kde/necessitas/ministro/IMinistro.aidl. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/kde/necessitas/ministro/IMinistroCallback.aidl. Same or newer file already in place.
-- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/src/org/qtproject/qt5/android/bindings/QtActivity.java
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtActivityLoader.java. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtApplication.java. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtLoader.java. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtService.java. Same or newer file already in place.
-- Skipping file /home/me/Qt5.7.0/5.7/android_x86/src/android/java/src/org/qtproject/qt5/android/bindings/QtServiceLoader.java. Same or newer file already in place.
Detecting dependencies of application.
Command does not exist: /home/me/android-ndk-r12b/toolchains/i686-linux-android-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-readelf
Reading dependencies from /home/me/Dokumente/Projekte/fairytale/buildandroid/libfairyland.so
Command does not exist: /home/me/android-ndk-r12b/toolchains/i686-linux-android-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-readelf
Reading dependencies from /home/me/Qt5.7.0/5.7/android_x86/plugins/platforms/android/libqtforandroid.so
Copying GNU STL library
-- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid//libs/x86/libgnustl_shared.so
Copying 0 dependencies from Qt into package.
Checking if application binary is in package.
Copying gdbserver into package.
-- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid//libs/x86/gdbserver
-- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid//libs/x86/libgdbserver.so
Copying Android sources from project.
-- Copied /home/me/Dokumente/Projekte/fairytale/buildandroid/AndroidManifest.xml
Stripping libraries to minimize size.
Command does not exist: /home/me/android-ndk-r12b/toolchains/i686-linux-android-4.9/prebuilt/linux-x86_64/bin/i686-linux-android-strip
CMakeFiles/my_app_apk.dir/build.make:60: recipe for target 'run_android_deploy_qt' failed
gmake[2]: *** [run_android_deploy_qt] Error 9
CMakeFiles/Makefile2:206: recipe for target 'CMakeFiles/my_app_apk.dir/all' failed
gmake[1]: *** [CMakeFiles/my_app_apk.dir/all] Error 2
Makefile:160: recipe for target 'all' failed
gmake: *** [all] Error 2
它使用的目标"i686"不存在,我在任何地方都没有指定。我的Bash脚本调用CMake和构建过程,如下所示:
if [ ! -d "./buildandroid" ] ; then
mkdir ./buildandroid
fi
echo "$HOME"
export PATH="$HOME/Android/Sdk/tools/:$PATH"
export ANDROID_HOME="$HOME/Android/Sdk"
export PATH="$ANDROID_HOME/tools:$PATH"
export PATH="$ANDROID_HOME/platform-tools:$PATH"
export ANT_PATH=$(which ant)
cd ./buildandroid
# If build type Debug is used CMAKE_GDBSERVER has to specified for the command android_create_apk()
cmake -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="$HOME/Qt5.7.0/5.7/android_x86/lib/cmake" -DCMAKE_TOOLCHAIN_FILE=../cmake/android.toolchain.cmake -DANDROID_NDK="$HOME/android-ndk-r12b" -DCMAKE_BUILD_TYPE=Release -DANDROID_ABI="x86" -DANDROID_NATIVE_API_LEVEL="24" ../
cmake --build .
# Manual installation of the packed apk file for the emulator
#$ANDROID_HOME/platform-tools/adb install ./apk/bin/fairyland-debug.apk
add_qt_android_apk((的打包过程如何获得错误的体系结构,从而找不到请求的工具?
Btw。我对如何使用CMake部署Qt应用程序的建议持开放态度。我在互联网上找到的两个模块,当不使用qmake或Qt Creator时,它们似乎是最好的解决方案。
看起来https://github.com/LaurentGomila/qt-android-cmake/pull/10修复了此问题。我错误地发现了它。它还没有被合并到master中。
编辑:我还必须使用:
set_property(TARGET fairyland PROPERTY VERSION "1")
否则,生成的清单文件中的版本为空,生成不起作用。
相关文章:
- vscode g++链路故障:体系结构x86_64的未定义符号
- 体系结构x86_64的未定义符号:std:terminate(),typeinfo,运算符delete[],运算符new
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) - 体系结构的未定义符号 x86_64:
- 体系结构x86_64的未定义符号:链接器错误
- C++ std::vector<int> 体系结构的未定义符号 x86_64:
- 未使用的 asm() 在不受支持的体系结构上的行为
- 用于本地网络运行的客户端服务器体系结构
- 生成文件:体系结构x86_64的未定义符号
- Xcode"体系结构x86_64的未定义符号"
- 有了memory_order_relaxed,原子变量的总修改顺序如何在典型体系结构上得到保证
- 体系结构x86_64的未定义符号:找不到原因
- 在OSx:ld上使用CMake构建C++项目:找不到体系结构x86_64的符号
- 体系结构x86_64的未定义符号:c++/ h 文件和 cpp 文件
- 如何根据目标体系结构将共享库链接到另一个共享库
- 编译错误 - 必须定义目标体系结构
- 如何使用LLVM为不同的目标体系结构编译程序
- AddQtAndroidApk检测到错误的目标体系结构
- 找不到体系结构i386的目标C和C++符号