用于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构建应用程序的主要内容,如果未能解决你的问题,请参考以下文章
17.3 构建LinuxPC端QT软件上的ARM编译套件并进行测试