Raspberry Pi 2 和 Qt 5.7 - make 停留在 `../qtbase/bin/qmake -conf ../qtbase/qt.conf -o Makefile qt.pro`

Raspberry Pi 2 and Qt 5.7 - make stuck at `../qtbase/bin/qmake -conf ../qtbase/qt.conf -o Makefile qt.pro`

我试图在 上编译 Qt 5.7 的本机构建(我还没有对那个东西进行交叉编译...) Raspberry Pi2。我已经关注了tutorial on the official Qt wiki。我的 configure 步骤是:

./configure -v -opengl es2 -tslib -force-pkg-config -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=/usr/bin/ \
 -opensource -confirm-license -optimized-qmake -reduce-exports -release -qt-pcre -make libs \
 -prefix /usr/local/qt5 2>&1 | tee config.out

我的设置与教程中的设置类似 - 我使用的是外部 USB 记忆棒,ext4 文件系统安装在 /media/USBmount --bind 来自 /media/USB/build/QT_SRC/opt/QT_SRC。已安装先决条件(包括 libxcb-xinerama0libxcb-xinerama0-dev,文章指出这是 Qt5.6 及更高版本所必需的)。 !1GB swapfile 也被添加到 USB 驱动器。

我执行后./configure我执行了

time make -j3 2>&1 | tee make.out

我也试过普通的 make(不支持并行编译和链接)。结果是一样的:

/opt/QT_SRC/qtbase/bin/qmake -qtconf /opt/QT_SRC/qtbase/bin/qt.conf -o Makefile qt.pro
/opt/QT_SRC/qtbase/bin/qmake -qtconf /opt/QT_SRC/qtbase/bin/qt.conf -o Makefile qt.pro
/opt/QT_SRC/qtbase/bin/qmake -qtconf /opt/QT_SRC/qtbase/bin/qt.conf -o Makefile qt.pro
/opt/QT_SRC/qtbase/bin/qmake -qtconf /opt/QT_SRC/qtbase/bin/qt.conf -o Makefile qt.pro
/opt/QT_SRC/qtbase/bin/qmake -qtconf /opt/QT_SRC/qtbase/bin/qt.conf -o Makefile qt.pro
/opt/QT_SRC/qtbase/bin/qmake -qtconf /opt/QT_SRC/qtbase/bin/qt.conf -o Makefile qt.pro
...
...
...
/opt/QT_SRC/qtbase/bin/qmake -qtconf /opt/QT_SRC/qtbase/bin/qt.conf -o Makefile qt.pro

这就是我得到的全部。它在很长一段时间内重复并重复自己很多次。我想在睡觉时进行部分构建,所以我只是 运行 make 在我睡觉前...6.5 小时前。现在我醒了,我发现了这个……结果。我显然在那里有 qmake 否则会触发错误,但我不知道这里发生了什么。

有没有人尝试在 Raspberry Pi 2 上构建 Qt 5.7 并遇到这个奇怪的问题?

出于某种原因,顶级 configure 无法正常工作(至少在我的情况下...)。我不得不从那里进入 qtbase 和 运行。您可以遵循 official guide on building Qt 5 natively on the Pi but it appears that not everything will be compiled and installed. The solution of this problem came from this post 中的大部分说明:

  1. cd 到 Qt 5 源代码的顶级目录

    $ cd QT_SRC_ROOT_DIRECTORY
    
  2. 选择您要构建和安装的模块并执行

    $ for module in qtcharts qtdatavis3d qtimageformats qtsvg ...;
    > do
    > cd QT_SRC_ROOT_DIRECTORY/$module
    > QT_SRC_ROOT_DIRECTORY/qtbase/bin/qmake
    > make
    > sudo make install
    > done
    

这基本上通过进入内部循环遍历每个模块,运行ning qmake(这就是为什么你首先必须编译里面的内容 qtbase 这样你就可以拥有 qmake 二进制 - 除了 qtbase 所有其他模块都基于 pro 文件,即只能与 qmake 工具一起使用的 Qt 项目文件),然后 make 最后 sudo make install.

我使用了绝对路径(与提到的博客 post 不同),因为 for 循环中的 ../$module 实际上不起作用,但使用绝对路径非常有效。所以在我的例子中,我有 /opt/QT_SRC 作为我的 QT_SRC_ROOT_DIRECTORY,所以我将它添加到那个循环中以访问每个 $module。我的 qmake 位于 /opt/QT_SRC/qtbase/bin/qmake.

希望这对其他人有帮助。现在,我的 Raspberry Pi 2 上的 Qt 5.7 功能齐全,包括 GPL 模块 QtChartsQtDataVisualization。刚刚测试了触摸示例以及 OpenGL Qt 立方体示例 - 太棒了!

PS: Pi 的本机和交叉编译版本的文档需要认真更新和修复...并研究如何正确地做事。

我 运行 在 Raspberry Pi 上构建 Qt 5.7 时遇到同样的问题 3. 我通过单独构建和安装所有模块解决了这个问题,从 qtbase 开始,像这样:

$ .../qtbase/bin/qmake
$ make
$ make install

建筑的顺序很重要。我不记得我遵循的顺序,但是,如果某些 Qt 模块需要先构建另一个模块,则会产生错误。错误信息是这样的:

Some of the required modules (qtHaveModule(???)) are not available

我没有构建一些模块,如 qtwayland、qtwebview 或 qtwebengine,因为它们需要安装一些其他东西,而我不需要它们。 在构建 Qt 5.7 并配置我的 Raspberry Pi 之后,我可以 运行 我的所有 Qt 应用程序成功。