2016-10-03 107 views
1

我需要为Android arm64-v8a设备构建一个Qt应用程序。如何编译Qt for Android arm64-v8a?

这些设备应该能够运行由QtCreator支持的armv7a二进制文件(请参阅Is arm64-v8a compatible with armeabi-v7a?)。但是我的应用程序在arm64-v8a上出现故障,而它在armeabi-v7a上工作,所以我想直接为arm64-v8a构建我的应用程序并再次测试。

一些searchs后,我结束了使用此命令尝试配置QT(QT-比比皆是-5-7):

我工作在Windows 7

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 (由QtCreator 4.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. 

B:\Android\android-ndk-r11b/toolchains/aarch64-linux-android-4.9/prebuilt/没有arm64-v8a文件夹,只有windows-x86_64存在......但我无法找出哪些选项我应该修改有Qt的脚本皮卡这个一个...

注:

  • 试图以取代-android-ndk-host windows-x86_64-android-ndk-host arm64-v8a并得到了错误Impossible de trouver B:\Qt\qt_everywhere\5.7.0\qt-everywhere-opensource-src-5.7.0\qtbase\config.tests\arch\*~

回答

1

android NDK主机参数指的是主机平台,所以这就是windows-x86_64,就像你说的那样。使用-android-arch参数指定目标CPU体系结构。

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

此外,“-opengl桌面”没有任何意义,因为您没有编译桌面。不过,我认为这不会造成任何伤害。

这里是关于交叉编译的Qt针对Android的更多信息:http://wiki.qt.io/Android

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

下面是使用Qt的已知问题的详细信息为Android:从jpo38 https://wiki.qt.io/Qt_for_Android_known_issues


编辑: 其实openGL的选项导致编译问题。也必须禁用qtdeclarative。最终工作配置命令是

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 

然后Qt编译所有的.so文件。没有尝试与他们一起运行任何程序......

+0

通过'-android-ndk-host windows-x86_64'从全新提取的qt-everywhere文件夹中将'-android-ndk-host arm64-v8a'替换为建议,它的工作(仍然有'B:\ Qt \ qt_everywhere \ 5.7。0 \ qt-everywhere-opensource-src-5.7.0 \ qtbase \ config.tests \ arch \ *〜'但显然是无害的)。现在正在编译,我正在越过我的手指;-) – jpo38

+0

编译后,在命令行中进行了细微的更改。编辑您的帖子。再次感谢您的帮助,并感谢Qt的支持! – jpo38