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

时间:2012-09-18 18:05:13

标签: linux qt embedded arm

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

到目前为止,我已经在我的AT91SAM9263-EK上运行了一个适当的Linux filessystem包括通过buildroot构建的QT库。

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

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

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

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

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

    任何帮助表示赞赏!

    问候

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

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

3 个答案:

答案 0 :(得分:4)

我会自己解决:)

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

  1. 不要在PATH变量的开头添加X11的QT路径。这可能会弄乱你的交叉汇编。

  2. 相应地编辑qmake.conf。添加你的libs build为目标设备,在我的情况下位于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

  3. 我现在跑了。谢谢大家!

答案 1 :(得分:0)

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

答案 2 :(得分:-3)

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

$QTDIR_FOR_ARM/qmake

参考: Installing Qt for Embedded LinuxCross-Compiling Qt for Embedded Linux Applications