让我解释一下这个神秘的标题:我目前在尝试编译Qt 5.6时遇到了很多麻烦,以便在Android上使用它。我不想做的是编写Qt来编写Android应用程序,如Qt wiki和docs中所述。我没有问题,但这不是我想要的。相反,我的目标是交叉编译它,就像我在RasPi或Beaglebone上使用它(例如)一样。
这是我的.configure
命令,Qt源代码和构建目录位于/opt/qt/
中的Android NDK,/opt/android/ndk/
:
./configure -device linux-arm-generic-g++ -device-option \
CROSS_COMPILE=/opt/android/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi- \
-sysroot /opt/android/ndk/platforms/android-21/arch-arm \
-extprefix /opt/qt/android/target -hostprefix /opt/qt/android/host \
-opensource -confirm-license -opengl es2 -eglfs -no-xcb \
-skip qtwebkit -skip qtwinextras -skip qtx11extras -skip qtscript \
-skip qtactiveqt -skip qtmacextras -skip qtquick1 -v \
-I/opt/android/ndk/sources/cxx-stl/gnu-libstdc++/4.9/include \
-I/opt/android/ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include \
-L/opt/android/ndk/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/
这会引发以下错误(缩减为相关位):
error: undefined reference to 'std::_Rb_tree_decrement(std::_Rb_tree_node_base*)'
error: undefined reference to '__cxa_begin_catch'
error: undefined reference to '__cxa_rethrow'
error: undefined reference to '__cxa_end_catch'
error: undefined reference to '__cxa_end_cleanup'
error: undefined reference to 'std::ios_base::Init::Init()'
error: undefined reference to 'std::ios_base::Init::~Init()'
error: undefined reference to '__gxx_personality_v0'
collect2: error: ld returned 1 exit status
Makefile:89: recipe for target 'stl' failed
make: *** [stl] Error 1
STL disabled.
STL functionality check failed! Cannot build Qt with this STL library.
正如您所看到的,.configure
因未定义的引用错误而失败,这通常指向未链接的库。但是我错过了哪些?
我已经遇到了一些错误,并且能够通过网络搜索来解决这些错误,但我不知道如何从这里开始。关于交叉编译和从我不熟悉的项目构建大型代码库,我不是新手,但这让我很难过。
有人成功地按照我打算的方式编译Qt吗?有人可以共享配置设置或告诉我是否在我的中发现了明显错误吗?
我希望有人可以提前感谢大家!