分享

qt-embedded 4.5.2 交叉编译

 guitarhua 2011-12-19
qt-embedded 4.5.2 交叉编译
作者:bird8848 提交日期:2009-8-23 22:18:00 开心 | 分类: | 访问量:1489

  这里没有加入网上都有的触摸屏的支持:tslib
  下载了qt-embedded-linux-opensource-src-4.5.2
  分别存为两个文件夹xxx-pc和xxx-arm
  
  同时为了获取qvfb(以前下过的没用了,版本不对),下载了qt-x11-opensource-src-4.5.2,直接解压。
  
  * 首先,为了得到qvfb,进入qt-x11-opensource-src-4.5.2目录中。网上的教程说只需进入tools/qvfb里,拷贝两个文件,qmake -project; qmake; make就可以了,但是我这里报错说../bin/里没有uic,发觉这个还是要自己编。于是开始编译这个硕大的东西:
  1,configure,其实只是为了获得一个uic, qvfb,如果把整个都编译了,靠,时间就真的很长,我这就有教训了,ubuntu 8.04的系统,3G的主频,编译了5个小时差不多。所以在配置的时候要去掉很多用不到的东西,比如webkit, sql之类的,通过./configure --help可以知道什么东西可以不用。但是 -qvfb是一定要的。因此这里没有考虑裁剪的配置命令就算:
   ./configure -qvfb
  2,在差不多十几分钟的配置时间之后,就直接:
   make
  3,在差不多5个小时之后,不用make install了,进入到tools/qvfb目录下,复制tools/shared/deviceskin/下的deviceskin.h, deviceskin.cpp 到该目录下,然后建立工程:
   qmake -project
   然后
   qmake
   然后修改生成的Makefile文件,在LIBS后面添上-lXtst(当然如果没有这个库的话,需要自己装了: sudo apt-get install libxtst-dev)
   make
   生成了qvfb的可执行文件,就是这个了。
  
  ** 接下来进入qt-embedded-linux-opensource-src-4.5.2-pc,构建用于pc上模拟开发的库
  1,./configure
   以上进行配置,默认的配置选项可以通过./configure ---help了查看。要裁剪的话有自己配置
   我这边的配置是: ./configure -opensource -qvfb -no-qt3support -no-webkit -platform linux-g++
  2,make
   以我上面的配置,编译了3小时左右
  3,sudo make install
   因为在配置的时候没有指定安装路径,所以装在了/usr/local/Trolltec/QtEmbedded-4.5.2-i386/下
  4,测试
   首先运行刚才编译好的qvfb,然后进入到xxx/Trolltec/QtEmbedded-4.5.2-i386/example下,随意运行一个示例程序,比如 ./application -qws,就可以在qvfb里看到了。
  5,为了编译自己的程序,需要配置好环境变量。因为之前为了运行一些KDE下的程序,使用apt安装过了qt4的开发包,因此系统里已经有了相应的qmake之类的。那么如果说要能够使用刚编译好的,那么就需要调整环境变量来使用新的。其实如果不使用这些,也可以使用apt装好的来进行PC上的模拟开发。
   这里有快速安装:
   sudo apt-get install qt4-dev-tools qt4-doc qt4-qtconfig qt4-demos qt4-designer libqt4-dev
   以上就可以有了基本的PC上的qt编译环境,但是奇怪的是qt3里有个qt3-embedded-tools包,4却没有,因此需要前面的繁琐工作来编译qvfb。
   如果是使用刚才编译好的,需要如下环境变量设置:(这部分以后有实际用qt开发再了弄)
  
  *** 最后要交叉编译QT库了。
  1,进入到qt-embedded-linux-opensource-src-4.5.2-arm目录下,进行配置,我的配置如下:
   ./configure -xplatform qws/linux-arm-g++ -embedded arm -little-endian -opensource -no-largefile -no-qt3support -no-webkit -qt-gfx-linuxfb -depths 16\
   -qt-kbd-tty -qt-kbd-usb -qt-mouse-pc -qt-mouse-bus -qt-mouse-yopy -qt-zlib -qt-gif -qt-libpng -qt-libjpeg
   这里只是实验性的配置了一下,如有具体需要可以再裁剪的。但是这里有几个地方要注意,也不知道是不是我这边特有的现象:
   a,我试过将-prefix定义为arm所在目录下,但是总是在编译过程中有错误,所以还是装在了缺省的目录下;
   错误如下:
  /media/f/QT/qt-embedded-linux-opensource-src-4.5.2-arm/bin/moc: error while loading shared libraries: /usr/local/arm/3.4.1/arm-linux/lib/libdl.so.2: ELF file OS ABI invalid
   b,对于交叉编译器,我对是arm-linux-3.4.1,低版本的就没用了,这个在官网上有说明;
   c,对于输入设备没有特别挑选,觉得可能的都选了。
   关于配置更详细的参数说明还是要看configure --help里的说明,特别是里面有针对embedded部分的说明;
  2,配置之后,在make
  3,make完了之后,sudo make install。因为是装在缺省目录下(/usr/local/Trolltech/QtEmbedded-4.5.2-arm),所以要用sudo了;
  4,在安装之后,网上的教程说要设置各种环境变量来配置qt开发环境。我这里没有配置qvfb模拟开发的环境,就直接配置为交叉编译的环境了
   因为已经在系统里安装了乱七八糟的各种qt,但为了能够在编译时能够调用到交叉编译的qmake,所以在~/.bashrc下添加了:
   export PATH=/usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin:$PATH
   这样的话机会优先调用arm下的qmake了。但配置生效后(一般是重开shell或者source ~/.bashrc),执行命令which qmake就可以看到具体路径了,但是奇怪的是whereis qmake还好死老样子。
  5,我就只设置了这个环境变量,然后写了一个hello world,保存为main.cpp
  
   #include
   #include
  
   int main(int argc, char *argv[])
   {
   QApplication app(argc, argv);
   QLabel label("Hello, world! from zhs");
   label.show();
   return app.exec();
   }
  
   然后执行:qmake -project; qmake; make,就生成了arm上运行的程序了。你可以看看Makefile里面的CC和CXX是不是arm-linux-g++,以确定是否为交叉编译。
  
  **** 移植
  最后就是要移植交叉编译好的库到板子上了。首先还是直接用nfs挂载,因此就不用考虑哪些要,哪些不要,统统都搬到目录下了,以后再裁剪吧
  1,拷贝/usr/local/Trolltech/QtEmbedded-4.5.2-arm这个目录到rootfs/usr/local/Trolltech下面,也就是和PC上保持同一个路径;
   虽然可以为其他路径,但是会要很繁琐的环境变量设置和其他设置,这里一切从简。
  2,这样之后,我这进入到4.5.2-arm/example/下面,因为我在configure的时候并没有将example忽略掉,因此可以执行示例程序了:
   ./test -qws
   可能会提醒你有些库找不到,那就到/usr/local/arm/3.4.1/arm-linux/lib/里面找相关的库拷贝到板子上的库目录下;
  3,一般这样之后就没问题了,程序正常运行,自己写的hello world也正常运行了。但是,对于我这个at91rm9200的179MHz的cpu来说,qt还是很吃cpu,而且示例程序的内存也基本最少要吃10M,很可怕,不知道是不是新的版本的是这样,这个以后要评估一下。
  
  
  ***** 总结:
   至此,为期5天的qt移植过程就结束了,最为第一次,还是很难受的(误)。网上漫天的我这里写的一样的教程,其实大概都差不多,只是因为每个人环境不同会有所变化。唉,linux装东西就是这点麻烦,但也是乐趣所在了。再说一句,QT编译真的很慢....
   不过界面看起来确实比minigui 1.6的看起来好看点,不知道minigui 3的有没有界面改进,但是不开源。
   另外,似乎因为源码是放在windows的ntfs的盘上,并且在那编译的,所以有个mount.ntfs进程要占很多CPU,使得编译过程慢了很多。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多