Qt4.5.2 在ARM平台的搭建、移植详解

来源:互联网 发布:slam 单片机 编辑:程序博客网 时间:2024/05/17 06:31

Qt4.5.2 ARM平台交叉编译的搭建、移植详解

 

一、Qt嵌入式开发平台的建立
概述:Qt嵌入式开发平台包括:
1
Qt-X11开发平台:(即为我们平时开发Qt应用程序时使用的系统平台)。
2
Qt/Embedded-4.5.2开发平台(即framebuffer):该平台可以让Qt程序在pc机上模拟在嵌入式平台的运行情况,一般在Qt/Embedded上模拟运行成功后才,进行交叉编译。
3
Qt/Embedded-4.5.2-arm交叉编译平台:在此平台下编译通过的Qt程序就可以移植到arm板上运行了。
step1

   
建立Pc开发平台(x11redhat9的桌面就属于X11):
   
下载Qt4.5.2pc开发包qt-x11-opensource-src-4.5.2.tar.gz(下载地址:ftp://ftp.trolltech.com/qt/source/

   #tar xzvf qt-x11-opensource-src-4.5.2.tar.gz
   #cd qt-x11-opensource-src-4.5.2
   #./configure -qvfb  
   #make

#cd tools/qvfb

#make

#cd ../..

#make install
   
安装好后,系统默认安装在/usr/local/Trolltech/Qt-4.5.2目录下

   
检查环境变量:
   #which qmake   

复制文件

进入/usr/local/Trolltech会看到一个Qt-4.5.2的目录,将 /home/tools/qt-x11-opensource-src-4.5.2/bin/目录下的qvfb相关文件拷贝到/usr /local/Trolltech/Qt-4.5.2/bin目录下

#cp qvfb* /usr/local/Trolltech/Qt-4.5.2/bin


     
注意:在configure时有可能会报如下的错误提示:

Basic XLib functionality test failed!

You might need to modify the include and library search paths by editing

QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in /usr/include/qt/qt-x11-opensource-src-4.5.2/mkspecs/linux-g++.

有两个原因会造成这个错误(具体的错误信息可以进config.test/x11/xlib执行make命令)

1、没有安装libxextlibX11-dev

2、安装了但路径与QT设置的不一样,这时你需要根据提示修改mkspecs/common/linux.conf中的宏定义
step2:
   
建立qt-embedded -4.5.2编译平台(此时编译器仍然用的是默认的gcc
   #tar xzvf qt-embedded-linux-opensource-src-4.5.2.tar.gz
   #cd qt-embedded-linux-opensource-src-4.5.2
   ./configure -embedded x86 -qvfb -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
   #make install    
   
安装完成后usr目录多了一个文件夹/usr/local/Trolltech/QtEmbedded-4.5.2就表示安装成功了
  step3

   qt-embedded -4.5.2-arm
交叉编译平台的建立(此时不是用系统默认的gcc来编译了)
   #tar xzvf qt-embedded-linux-opensource-src-4.5.2.tar.gz
   #cd qt-embedded-linux-opensource-src-4.5.2
   #./configure -embedded arm   //
注意几个选项,必须加上 -embedded arm选项
   #make install 
   
安装完成后usr目录多了一个文件夹/usr/local/Trolltech/QtEmbedded-4.5.2-arm就表示安装成功了
   
注意:如果你的arm平台用的不是arm-linux-g++的编译器,则需修改mkspecs/qws/linux-arm-g++/qmake.conf
step4:
   
设置环境变量:环境变量的设法总的说来有4种(exportprofile.bashrc.bashrc_profile)具体看自己情况来定

   #vi /root/.bash_profile  //
在环境变量的最前面加上一句:

PATH=/usr/local/Trolltech/QtEmbedded-4.5.2 /bin:$PATH
   #source /root/.bash-Profile   //
使环境变量生效

   好了平台已经搭建好了,可以用他来编译Qt程序了
   
注意:如果要编成arm平台的程序,需将环境变量改为

PATH=/usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin:$PATH
    设置虚拟屏幕

#export DISPLAY=:0.0

# qvfb &          //运行qvfb
step5:
   
qt-embedded -4.5.2来进行编译,x86上运行程序

hello例子,其源程序如下:

#include <QApplication>

#include <QLabel>

int main(int argc, char *argv[])

{

  QApplication app(argc, argv);

  QLabel *label = new QLabel("Hello Qt!");

  label->show();

  return app.exec();

}

将上面内容保存为hello.cpp
   #qmake -v  //
检查自己的qt环境变量是否正确,如果不正确的话,就返回第4

   #cd myqtprogram   //
进入自己写的qt程序
   #qmake -project   //
生成.pro工程文件
   #qmake          
//生成Makefile
  #make            
//生成执行程序

#./myqtprogram  -qws  //运行程序
 
如果要生成arm平台的程序,可通过修改环境变量,使 qt-embedded -4.5.2-arm来进行交叉编译,使其生成arm平台的程序
step6

   
如果要在arm板上运行QT程序,在进行交叉编译后,查看自己写的Qt程序需要用到哪些库文件资源。
  
#ldd  myqtprogram

如果不支持ldd命令,可以使用arm-linux-readelf -a -myqtprogram | grep Shared  //Shared首字母大写;
   
step7

   
拷贝库文件:
   
根据上一步提示把Qt程序要用到的资源文件拷到自己制作的根文件系统中,以下是按本人写的Qt程序所需要的库写的
   
将程序移植到arm板运行
   
拷贝库文件到自己制作的root系统中(注意:拷贝时一定要看看大小,千万不要拷到连接文件(相当于快捷方式)了)
   #cd usr/lib   
   #cp /usr/local/Trolltech/ QtEmbedded-4.5.2-arm /lib/libpng*  ./                  //
把图形库考过去,否则图片显示不了,强烈建议用pngbmp格式的图片,用其他格式的图片的话,否则你还要自己做连接库
   #cp /usr/local/Trolltech/ QtEmbedded-4.5.2-arm /lib/libQtCore.so libQtGui.so  ./     //
2个库不用说一定要考的
   #cp /usr/local/Trolltech/ QtEmbedded-4.5.2-arm /lib/libQtNetwork.so  ./           //
和网络相关的库
   #cp /usr/local/Trolltech/ QtEmbedded-4.5.2-arm /lib/libstdc++.so  ./
   #cd ../    //
以下是在根文件系统qt-root/usr/local/下制增加一个Trolltech/ QtEmbedded -4.5.2-arm/lib/fonts路径目录并添加相应的字体文件,否则在arm板上会出错显示不了字

   #mkdir local/Trolletch
   #mkdir local/Trolletch/QtEmbedded-4.5.2-arm
   #mkdir local/Trolletch/QtEmbedded-4.5.2-arm /lib
   #cp /usr/local/Trolltech/QtEmbedded-4.5.2-arm /lib/fonts local/Trolletch/QtEmbedded -4.5.2-arm/lib  //
注意不要拷错路径了
step8:
   
把程序下载到arm板运行

注意:如果arm板上液晶显示的设备不是/dev/fb0,则需链接过去,否则运行时会提示找不到fb0
 
   #./myqtprogram -qws   //-qws表示以服务器模式运行

   ok
能在板子上跑起来了

 

常见问题解决方法:

1、        运行QT程序报如下错误

Qt for Embedded Linux data directory is not owned by user 520h

解决方法是将/tmp目录下的qtembedded-0目录删除。造成该错误是因为用户没有该目录的权限。

0 0
原创粉丝点击