3

当涉及到我的 arm-linux 的 QT 和交叉编译应用程序时,我有点困惑:

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

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

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

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

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

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

任何帮助表示赞赏!

问候

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

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

4

3 回答 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

我现在让它运行起来。谢谢大家!

于 2012-09-19T19:19:52.517 回答
0

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

于 2012-09-18T18:47:56.097 回答
-3

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

$QTDIR_FOR_ARM/qmake

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

于 2012-09-19T05:25:26.143 回答