QT移植总结(二)QT-4.6.3

来源:互联网 发布:大众汽车维修软件平台 编辑:程序博客网 时间:2024/04/29 17:03

   本来想编译个高版本的qt版本,由于公司的这个机器里一共只有50M的空间。所以最终还是选择用低版本吧。

   QT的移植包括: QT库准备、QT库的编译    QT库的移植 和基于QT的应用程序的移植。

一、准备:

        qt版本下载路径:http://qt-project.org/downloads

      下载的qt-everywhere-opensource-src-4.6.3.tar.gz

     我们需要编译三个不同类型的QT库,分别根据不同的配置生成的。

      解压生成三个不同的文件qt-everywhere-opensource-src-4.6.3-arm,qt-everywhere-opensource-src-4.6.3-x86, qt-everywhere-opensource-src-         4.6.3-pc。

     所有生成的库都放在/usr/local/Trolltech目录下。

二、编译:

1)进入qt-everywhere-opensource-src-4.6.3-pc中运行

                  # ./configure 

                  # gmake

                  # gmake install


            编译的时间很长哦!耐心等待。最终得到的库信息:955M    Qt-4.6.3


2)进入qt-everywhere-opensource-src-4.6.3-x86目录

       # ./configure -embedded x86 -qt-gfx-qvfb -qt-kbd-qvfb  -qt-mouse-qvfb

      #  gmake

      # gmake install

    编译也是漫长的。最终得到的库信息:865M    QtEmbedded-4.6.3

进入

qt-4.6.3-arm

目录,输入编译基于

arm

处理器的配置命令

3)进入qt-everywhere-opensource-src-4.6.3-arm目录

      # ./configure -prefix /usr/local/Trolltech -opensource -confirm-license -release -shared -embedded arm -xplatform qws/linux-arm-g++ -depths 4,8,16,18,24,32 -fast -optimized-qmake -no-multimedia -no-script -no-scripttools -no-svg -no-sql-sqlite -no-testlib -no-libjpeg -qt-zlib -qt-libpng -qt-freetype -little-endian -host-little-endian -no-qt3support -no-xmlpatterns -no-libtiff -no-libmng -no-opengl -no-mmx -no-sse -no-sse2 -no-3dnow -no-openssl -no-webkit -no-qvfb -no-phonon -no-nis -no-cups -no-glib -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-separate-debug-info -qt-mouse-tslib -I/opt/tslib-1.0/include -L/opt/tslib-1.0/lib

    #gmake

     #gmake install

    顺利编译完成后,会在/usr/local/Trolltech先生成文件QtEmbedded-4.6.3-arm。大小:49M     QtEmbedded-4.6.3-arm

    arm的配置参数后面专门讲解,因为自身空间小的缘故配置的时候一定要根据自己的使用情况来控制。

三、交叉编译

   基于arm的QT库已经生成,交叉编译环境只需要配置好环境变量便可以。

   编写一个脚本,每次开服务器的时候运行一次便可。vi  setenv-embedded.sh  脚本内容如下:

   #bash shell
 #setenv-embedded.sh
 PATH=/usr/local/QtEmbedded-4.6.3-arm/bin:$PATH
 QTDIR=/usr/local/QtEmbedded-4.6.3-arm
 MAINPATH=$QTDIR/man:$MAINPATH
 LD_LIBRATY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
 export PATH QTDIR MAINPATH LD_LIBRARY_PATH

执行命令如下:

source setenv-embedded.sh

四、QT库的移植

   (1)在你的开发板或者设备上创建目录可以根据你的喜好,比如放在home下mkdir qt

    (2)拷贝PC或者Linux服务器中的/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib的内容到开发板的qt目录下

    (3)拷贝PC机或者Linux服务器中的/usr/local/Trolltech/QTEmbedded-4.6.3-arm/bin的内容到开发板qt目录下。注意这两个拷贝都用打包的方式传送到开发板中。

     (4)配置环境变量:可以直接在vi /etc/profile里面改变,这样在每次开机的时候默认就是设置好。

      记着开发板上修改/tslib/etc下的ts.conf #modul_raw input 去掉#然后删除多余的空格。

配置如下:

       export TSLIB_CALIBFILE='/etc/pointercal'                              #配置校准文件  上节中的触屏的配置
       export TSLIB_CONFFILE='/etc/ts.conf'                                   #tslib的配置文件
    export TSLIB_CONSOLEDEVICE='none'                              #控制台设备
export TSLIB_FBDEVICE='/dev/fb0'                                     #framebuffer设备
export TSLIB_PLUGINDIR='/usr/lib/ts'                                   #ts插件
export TSLIB_TSDEVICE='/dev/input/by-path/platform-touchscreen-event'    #ts设备
export QTDIR=/home/user0/qt                                            #qt安装路径
export QT_QWS_FONTDIR=$QTDIR/lib/fonts                   #qt字体库路径
export T_ROOT=/home/user0/tslib1.0                               #tslib安装的路径                          
export PATH=$QTDIR/bin:$PATH                                      #qt bin文件路径
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib:$LD_LIBRARY_PATH #声明环境变量

五、应用程序的移植

      (1)编写应用程序 在linux服务器上编辑hell.cpp文件,从很简单的hello开始,呵呵

       #include <QApplication> 
#include <QPushButton>  
int main(int argc, char *argv[]) 

    QApplication app(argc,argv); 
   QPushButton b("Hello World !"); 
    b.show();  
    QObject::connect(&b,SIGNAL(clicked()),&app,SLOT(quit()));  
    return app.exec(); 

    (2)编译

        1)/usr/local/Trolltech/QtEmbedded-4.6.3-arm/qmake -project     生成.pro文件

        2)/usr/local/Trolltech/QtEmbedded-4.6.3-arm/qmake                 生成交叉编译Makefile文件

        3)make                                编译

        如果在编译的时候报错:

       /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_read_raw'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_open'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_fd'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_config'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_close'
/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libQtGui.so: undefined reference to `ts_read'

    修改makefile中的Lib加上-L/opt/tslib-1.0/lib -lts 根据你的tslib路径,我这边的原因是生成的makefile中没有加上 -lts导致的。光有个路径但是没有库。

  

   至此,arm交叉编译生成的执行文件hello出来了。拷贝hello到机器上。增加执行权限并运行: ./hello -qws &

   在开发板上运行的时候记着加上-qws。

  在你的开发板看到界面了吗?我是看到了。小开心一下!路漫漫。继续加油!








       

0 0