linux下arm平台Qt编译环境搭建与解析

来源:http://www.code06.com/software/jiangheng0535/77379.html


一.概述:

     我们知道QTcreator,这只是个IDE,他包括了一个编译器--qmake.这两者的关系与codeblocks和g++的关系一样,首先要明白这些。

     而我们在linux下搭建arm平台的QT编译环境,主要的是要使用适合arm的qmake,正如我们编译在arm上使用c++程序时要用arm-none-linux-gnueabi-g++一样。而qmake只是我们使用的工具,自然不需要也不能换。所以我们只要使用arm-none-linux-gnueabi-g++编译一个qmake即可(主要是编译生成arm上适合使用库,qmake应该还是适合linux下使用的,否则也无法编译)。

二.环境:

    pc机:linux即可,我用的是ubuntu,这些没什么影响

    arm:arm9,这个也没什么影响,只是你的交叉编译器一定要对应你的arm平台

    交叉编译器:arm-none-linux-gnueabi-,编译器用适合自己的arm平台的,至于交叉编译器的使用,这里不做讲述了。

   QTcreator:QT4.8左右的,这个也无所谓,只是配置稍微不同,思路一样

    qmake:使用qt-everywhere-opensource-src-4.7.4.tar.gz生成,核心就是这一步。

三.准备

    1.安装交叉编译器,包括配置环境,arm-none-linux-gnueabi-g++可用应该就没有问题了,这里可以参考前面对交叉编译器安装的记录。

    2.下载qt--everywhere-opensource-src-4.7.4.tar.gz,百度搜吧。

    3.QTcreator安装,直接在ubuntusoftwarecenter安装即可,自己网上下载适合版本点击安装也可,很简单。这里说明一下,你安装了QTcreator已经自带了qmake,它是编译linux(你自己的pc)平台程序的,你要用适合arm的qmake替换它,两者可以自己切换。

四.armqt库的编译生成

    1.解压。。。。。。。。。。。。

    2.进入qt-everywhere...........接下来有人说要改mkspecs/qws/linux-arm-g++/qmake.conf(当前目录下),这是应为自己要用的交叉编译器是arm-none-linux-gnueabi-而不是

arm-linux-,其实不需要,应为mkspecs/qws/下有linux-arm-gnueabi-g++可以对应我们要用的交叉编译器,我们使用它既可

   3.     ./configure -prefix /usr/local/qt-4.7.3-linux-arm-install -embedded arm -host-little-endian -no-cups -no-3dnow -nomake examples -nomake demos -nomake docs -xplatform /qws/linux-arm-g++    -prefix代表你的安装目录,-embedded代表安装嵌入式版本的,最后的-xplatform指定编译器,如上步描述的一样。

    4.上步中会有几次提示,第一次问你开源还是*****,总之选o就可以了,过一段时间还会提示你,选择yes既可,如果没有这两步的话就是有问题,就不要浪费几个小时去make了,重新来过吧。如果成功,他会提示你执行make执行make install,还会告诉你安装在哪个目录。

     5.make,几个小时才可以。

     6.make install ,这样就算完成了,你会再安装目录看到有bin,include,lib灯这些目录,跟gcc的目录差不多,跟编译完boost的目录也差不多,其实道理都是一样的。

      7.需要的话你要给你的qmake改个名字(你的电脑安装qtcreator的时候已经有个qmake了,这是电脑版的),如armqmake,这样你就可以配置环境变量了,可以在任意目录执行你的armqmake,我没有做这里,自己不需要。

 

到这里,其实你就可以使用qmake了:

         hello.cpp源码:
         #include <QApplication>
         #include <QDebug>
         int main(int argc,char *argv[]) 
        {
            qDebug("Hello, welcome to Qt world!");
            return 0;
         }
  
  顺序执行以下操作:
  @1. 执行:qmake -project hello1.cpp
        生成 hello1.pro 工程文件
  @2. 执行:qmake hello1.pro
        生成 Makefile 文件 
  @3. 执行:make
        生成 hello.o, hello 文件 

 

五.配置qtcreator,这是为了开发方便

假设你已经安装好creator了,上面工具栏tool->option->左边build&run->qtversion,添加你的arm版的qmake(armqmake)。

还是这里,选tool chains添加你的交叉编译器。

选unconfigured project,不同版本可能不同,有个不是这个名字,但是作用一样。代表你要用哪个qmake对应哪个编译器(对,两个编译器,g++跟qmake,linuxpc对应pc的,arm对应arm的)。然后对应即可,有时候可能toolchain找不到你刚配置的交叉编译器,你关了重开option就该出来了。

 

 六.链接文件配置

问题:

1.导入qmake的时候可能会报错,我的是报错了,个人觉得应该都报错。

QTcreater提示The default mkspec symlink is broken. - 穆 - 穆 的日记本   小浣熊


这需要进入mkspecs目录查看default指向哪里,正确的应该指向/qws/linux-arm-gnueabi-g++,(不清楚默认的是不是这个,我这里没有查看,因为出现上图的问题,我直接改了),总之删除default,然后执行ln -s qws/linux-arm-gnueabi-g++ default就可以了,重新配置qtcreator后发现正常了(option窗口要关闭再打开)。

七.常见编译问题总结

    1.

2011-10-29 15:58

error: main.o: Relocations in generic ELF (EM: 3)解决办法

在编译arm版本的qt程序时,出现错误error: main.o: Relocations in generic ELF (EM: 3)。因为开始我的程序是编译成了x86版的程序,然后我想编译到arm下运行,编译的时候出现了上述错误。

解决办法:对工程clean一下,你再重新编译应该就没错了。


2. undefined reference to 'QWSKeyboardHandler::

出现这个问题,是说这个类没找到,而你发现这个类的确是在头文件包含的,这可能是因为你的编译器还是用的linux版本的,而这个类只存在arm版本。

解决办法:qmakearm要配置对,另外也可能是上面问题的default有问题,更改即可。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值