在QT和交叉编译方面,我有点困惑 我的arm-linux的应用程序:
到目前为止,我已经在我的AT91SAM9263-EK上运行了一个适当的Linux filessystem包括通过buildroot构建的QT库。
我也在我的ubuntu上构建了QT-4.8。
现在我想构建一个示例应用程序:
我在ubuntu上的QT中的examples文件夹中创建了一个makefile QMAKE;我在mkspecs / qws / linux-arm-g ++中使用了给定的qmake.conf。
执行make时出现错误,因为它包含qatomic_i386.h 和消息“错误:'asm'中不可能的约束”。 这个头文件显然与我的arm工具链不匹配。
我的问题: 如何在我的ubuntu上配置Qt来为我的嵌入式Linux构建Qt二进制文件 在胳膊上?我是否需要包含arm工具链构建的任何库?
任何帮助表示赞赏!
问候
编辑: 我使用-spec标志并将路径传递给“mkspecs / qws / arm-linux-g ++”,其中有“qmake.conf”。我在这里没有改变任何东西,因为我不知道qmake变量与链接到我的手臂相关的libs有关。 所以使用了正确的编译器,我可以在make进程启动时验证它。但我观察到在一个名为qconfig.h的配置文件中有一个ARCH标志设置为i386,但我没弄明白如何配置它。我不认为我应该手动编辑这个文件。
EDIT2: 有人知道文件qconfig.h背后是什么?我应该手动调整吗?
答案 0 :(得分:4)
我会自己解决:)
经过一段时间的努力并扫描网络后,我深入了解了一切如何协同工作。我不明白如何为我的ARM目标设备生成可执行文件。我想出了两件事:
不要在PATH变量的开头添加X11的QT路径。这可能会弄乱你的交叉汇编。
相应地编辑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
我现在跑了。谢谢大家!
答案 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 Linux和Cross-Compiling Qt for Embedded Linux Applications