用于arm linux的QT构建应用程序

Posted

技术标签:

【中文标题】用于arm linux的QT构建应用程序【英文标题】:QT building applications for arm linux 【发布时间】:2012-09-18 18:05:12 【问题描述】:

我对 QT 和交叉编译有点困惑 我的 arm-linux 的应用程序:

到目前为止,我的 AT91SAM9263-EK 上运行了一个 linux 和一个合适的 通过 buildroot 构建的文件系统,包括 QT 库。

我还在我的 ubuntu 上构建了 QT-4.8。

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

    我使用 ubuntu 在 QT 的示例文件夹中创建了一个 makefile qmake;我在 mkspecs/qws/linux-arm-g++ 中使用了给定的 qmake.conf。

    执行 make 时出现错误,因为它包含 qatomic_i386.h 和消息“错误:'asm' 中的不可能约束”。 这个头文件显然和我的 arm 工具链不匹配。

我的问题: 如何在我的 ubuntu 上配置 Qt 为我的嵌入式 linux 构建 Qt 二进制文件 在胳膊上?我需要包含由 arm 工具链构建的任何库吗?

感谢任何帮助!

问候

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

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

【问题讨论】:

qmake 参考手册是查找所有 qmake.conf 变量的好地方:qt-project.org/doc/qt-5/qmake-variable-reference.html 【参考方案1】:

我会自己解决的:)

经过一段时间的努力并浏览了网页后,我更深入地了解了一切是如何协同工作的。我不明白如何为我的 ARM 目标设备生成可执行文件。我想出了两件事:

    不要在 PATH 变量的开头添加 X11 的 QT 路径。这可能会打乱您的交叉编译。

    相应地编辑 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

我现在开始运行了。谢谢大家!

【讨论】:

【参考方案2】:

是的,您要么在工具链中提供 Qt 库,要么告诉 qmake 在哪里可以找到它们。另外,我怀疑您在没有 -spec 参数的情况下调用 qmake。如果您使用的是在您的发行版中找到的 qmake,它将使用默认规范,我猜这不是 arm。添加 -spec 参数并将其指向 arm mkspec。此外,确保生成的 g++ 命令链接到为 arm 编译的正确 Qt 库。

【讨论】:

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

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

$QTDIR_FOR_ARM/qmake

参考: Installing Qt for Embedded Linux 和 Cross-Compiling Qt for Embedded Linux Applications

【讨论】:

Ubuntu 已经有了 arm 的 mkspec。无需安装任何东西。此外,他已经为他的平台编译了库,无需重新编译。

以上是关于用于arm linux的QT构建应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在Windows下构建ARM Linux QT开发环境

如何将Linux下的QT程序移植到arm板上

17.3 构建LinuxPC端QT软件上的ARM编译套件并进行测试

简单的Qt程序构建但不显示输出

Linux系统上用QT编写ARM9继电器控制程序的问题。 想写个QT界面程序到arm板子上,通过界面的按钮来控制继电

如何把51程序移植到arm?