在ARM Linux上构建QT应用程序

3

在QT和交叉编译方面,我有点困惑:

目前我已经在AT91SAM9263-EK上运行了Linux,并且使用buildroot构建了相应的文件系统,包括QT库。

同时,我也在我的Ubuntu上构建了QT-4.8。

现在我想构建一个示例应用程序:

  1. 我在我的Ubuntu上的QT中的examples文件夹中创建了一个makefile,使用qmake;我使用了mkspecs/qws/linux-arm-g++中给定的qmake.conf。

  2. 执行make时,我遇到了一个错误,因为它包括qatomic_i386.h并显示"error: impossible constraint in 'asm'"。显然,这个头文件与我的arm工具链不匹配。

我的问题是:如何在我的Ubuntu上配置Qt以构建适用于我的嵌入式Linux的Qt二进制文件?我需要包含由arm工具链构建的任何库吗?

感谢任何帮助!

问候

编辑: 我使用-spec标志,并传递路径到“mkspecs/qws/arm-linux-g++”,其中有一个“qmake.conf”文件。我没有更改这里的任何内容,因为我不知道哪些qmake变量与链接到我的与arm相关的库有关。所以正确的编译器被使用,我可以在make进程开始时进行验证。但是我观察到,在一个名为qconfig.h的配置文件中,有一个ARCH标志,它被设置为i386,但我还没有弄清楚如何配置它。我认为我不应该手动编辑这个文件。

编辑2: 有人知道qconfig.h文件背后的内容吗?我应该手动调整它吗?


qmake参考手册是查找所有qmake.conf变量的好地方:http://qt-project.org/doc/qt-5/qmake-variable-reference.html - Hamzahfrq
3个回答

5

我会自己解决它 :)

经过一番努力和搜索,我对所有东西是如何协同工作有了更深入的了解。我不明白如何为我的ARM目标设备生成可执行文件。我找到了两个解决方案:

  1. 在PATH变量中不要在开头添加X11的QT路径,否则可能会搞乱你的交叉编译。

  2. 相应地编辑qmake.conf文件。将构建目标设备的库添加到其中,这些库在我的情况下位于buildroot内。请将以下行添加到您的qmake.conf文件中:
    QMAKE_CFLAGS += -O3 -march=armv5te
    QMAKE_CXXFLAGS += -O3 -march=armv5te
    QMAKE_INCDIR_QT = /home/user/arm/toolchain/buildroot-2010.11/output/staging/usr/include
    QMAKE_LIBDIR_QT = /home/user/arm/toolchain/buildroot-2010.11/output/staging/usr/lib

现在我已经把它运行起来了,感谢大家的帮助!


0

是的,你可以在你的工具链中提供Qt库,或者告诉qmake在哪里找到它们。我还怀疑你是没有带着-spec参数调用qmake的。如果你使用的是发行版中提供的qmake,它将会使用默认的spec,我猜想这不是arm。添加-spec参数并指向arm mkspec即可。此外,请确保生成的g++命令链接到为arm编译的正确的Qt libs。


你需要为你的平台(EGL、OpenGL、X11等)提供头文件和库的路径,以及Qt库的路径(如果它们不在你的sysroot中)。由于你没有指定你所说的配置文件是哪一个,所以我不知道。请阅读qmake手册和liuyi提供的链接,正确设置规范文件。 - Luca Carlon
这些链接描述了如何构建Qt本身,但我想要构建一个示例应用程序。我说的是位于mkspecs文件夹中的名为qconfig.pri的文件。该文件包括一个名为QT_ARCH的变量,其值设置为i386。 - binaryguy
你的问题太笼统了。在指定-spec参数后发生了什么?还是出现同样的错误吗?在第二个链接中,您可以找到“创建特定目标的 qmake 规范”。另外,正如我所说的那样,请阅读qmake手册。在那里,您可以找到所有qmake变量的规范。您可能需要根据自己的环境修改其中一些。 - Luca Carlon
qconfig.pri 文件似乎包含有关构建的信息。我想你应该已经得到了它。这取决于库是如何构建的。您可以尝试将 QT_ARCH 的值简单更改为 arm。 - Luca Carlon

-3

在构建应用程序之前,您应该先安装嵌入式Linux的QtSDK。恐怕您现在只有针对x86的QtSDK。安装了QtSDK for embedded linux后,它通常使用qws/linux-arm-g ++作为默认的mkspace。如果没有QtSDK for embedded linux,您可以从源代码构建它。然后运行qmake为您的应用程序创建Makefile。

$QTDIR_FOR_ARM/qmake

参考: 安装Qt for Embedded Linux交叉编译Qt嵌入式Linux应用程序


Ubuntu已经针对arm拥有mkspec。无需安装任何东西。而且,他已经为自己的平台编译好了库,无需重新编译。 - Luca Carlon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接