当前位置: 首页 > 知识库问答 >
问题:

如何xcompile Qt for Android ARM64-V8A?

轩辕修能
2023-03-14

我需要为一个Android arm64-v8a设备构建一个Qt应用程序。

这些设备应该能够运行QtCreator支持的armv7a二进制文件(请参见arm64-v8a是否与ARMEABI-V7a兼容?)。但是我在arm64-v8a上的应用程序在armeabi-v7a上工作时遇到了故障,所以我想直接为arm64-v8a构建应用程序并再次测试。

经过一些搜索,我最终尝试使用以下命令配置Qt(qt-everywhere-5-7):

我正在使用Windows7。

configure -xplatform android-g++ -debug-and-release -no-icu -no-wmf-backend -no-compile-examples -opengl desktop -nomake tests -nomake example -android-ndk B:\Android\android-ndk-r11b -android-sdk B:\Android\adt-bundle-windows-x86_64-20131030\sdk -android-arch arm64-v8a -android-ndk-host arm64-v8a -android-toolchain-version 4.9 -no-warnings-are-errors -platform win32-g++

我将mingw530_32(由QtCreator4.0.3/Qt5.7安装和使用的那个)添加到我的路径中。

然后我得到这个错误:

process_begin: CreateProcess(NULL, B:\Android\android-ndk-r11b/toolchains/aarch64-linux-android-4.9/prebuilt/arm64-v8a/bin/aarch64-linux-android-g++ -c -ffunction-sections -funwind-tables -fstack-protector -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300
 -DANDROID -Wa,--noexecstack -std=c++11 -g -g -fno-omit-frame-pointer -Wall -Wno-psabi -W -fPIC -I. -isystem B:\Android\android-ndk-r11b\sou
rces\cxx-stl\gnu-libstdc++\4.9\include -isystem B:\Android\android-ndk-r11b\sources\cxx-stl\gnu-libstdc++\4.9\libs\arm64-v8a\include -isyste
m B:\Android\android-ndk-r11b\platforms\android-21\arch-arm64\usr\include -IB:\Qt\qt_everywhere\5.7.0\qt-everywhere-opensource-src-5.7.0\qtb
ase\mkspecs\android-g++ -o arch.obj arch.cpp, ...) failed.
make (e=2): Le fichier spÚcifiÚ est introuvable.
mingw32-make: *** [arch.obj] Error 2
Could not find output file 'libarch.so' or 'arch' in B:/Qt/qt_everywhere/5.7.0/qt-everywhere-opensource-src-5.7.0/qtbase/config.tests/arch :
 No such file or directory
ERROR: Qt requires a C++11 compiler and yours does not seem to be that.
Please upgrade.
    null

共有1个答案

谢锦程
2023-03-14

android NDK主机参数指的是主机平台,所以如您所说的是windows-x86_64。使用-android-arch参数指定目标CPU体系结构。

请确保在重新配置之前清除任何遗留的构建构件。还要确保Cygwin不在您的路径上,因为这会破坏构建。要进行检查,请尝试在命令行上运行“where sh.exe”。我认为你看到的第二个错误可能是由于这个。

此外,“-OpenGL Desktop”没有任何意义,因为您不是为Desktop编译的。不过,我认为这不会有什么坏处。

以下是关于为Android交叉编译Qt的更多信息:http://wiki.Qt.io/Android

请注意:确保您使用Android NDK r10e,因为后续版本中的gcc有严重的错误,会导致所有应用程序崩溃。

以下是有关Qt for Android已知问题的更多信息:https://wiki.Qt.io/qt_for_android_known_issues

configure -xplatform android-g++ -debug-and-release -no-icu -no-wmf-backend -no-compile-examples -android-ndk B:\Android\android-ndk-r11b -android-sdk B:\Android\adt-bundle-windows-x86_64-20131030\sdk -android-ndk-host windows-x86_64 -android-toolchain-version 4.9 -no-warnings-are-errors -platform win32-g++ -android-arch arm64-v8a -skip qtdeclarative
 类似资料:
  • 我在这里看到了下面的代码。描述说: 我们还可以使用自动 我确实理解汽车的衰退

  • 问题内容: 我有一个水平线,我需要将每个垂直线居中。我的标记如下。每个都有一个边框,我需要物品及其内容垂直位于中间。请帮忙; 我是CSS新手。 问题答案: 我假设由于您使用的是XML声明,因此您不必担心IE或较旧的浏览器。 所以,你可以使用和像这样:

  • 问题内容: 如何将无序列表居中放置为固定宽度? 问题答案: 要使ul 居中并使li元素也居中,并使ul的宽度动态变化,请使用display:inline-block; 并将其包裹在居中的div中。

  • 问题内容: 如何使用CSS 在另一个文件中水平居中? 问题答案: 您可以将此CSS应用于内部: 当然,您不必将设置为。任何小于包含宽度的宽度都可以使用。是什么呢实际定心。 如果您以Internet Explorer 8(及更高版本)为目标,最好改用以下方法: 它将使内部元素水平居中,并且无需设置特定的 width。 这里的工作示例:

  • 我在做一个宠物项目(一种游戏)。我遇到了一个问题:当从控制台用命令调用应用程序时: 播放短的声音,但不播放长的声音。所有声音都在JAR中的“/资产”文件夹中。 音频的路径如下所示: 例如射击或跳跃。对于长音频数据,仅播放前 0.5 秒。 例如:如果您加载长度为0.834秒的声音,那么它会循环(背景音乐),声音将循环播放!(WAV 文件,0.843 秒,48 KB)。但是,如果加载 WAV 文件 2

  • 浏览器环境下的javascript, 实际上有两个天生缺陷: 不严谨. 不同浏览器的js实现上会略有不同. 这个问题在android, ios上也一样. 不是严格意义上的计算编程语言. 有语法漏洞. 例如 == 所以, 我们要驾驭好JS语言,就要知道如何有效的Debug. 时刻留意 vue server 我们开发时的命令: $ npm run dev 会开启一个"开发服务器", 这个开发服务器的

  • 如何验证 Email 地址是否有效 一般来说,你不能。有一些看起来合理的方法可以使用,但却没有办法检测地址 是否实际可以投递,如果没有实际尝试投递的话。 使用正则表达式: # Match basically blah@blah.blah if ( $addr =~ /^\S+\@\S+\.\S+$/ ) { print "Looks OK"; } 如果你干真活的话,可能希望看看 CPAN

  • 假设我创建了这样一个RDD(我使用的是Pyspark): 然后我用方法打印分区元素并获得 Spark是如何决定如何划分我的列表的?元素的特定选择来自哪里?它可以以不同的方式耦合它们,只留下0和10以外的一些其他元素,以创建6个请求的分区。在第二次运行中,分区是相同的。 使用更大的范围,有29个元素,我得到2个元素后跟3个元素的模式的分区: 使用更小范围的9个元素,我得到 因此,我推断Spark是通