• 交叉编译安装ARM平台上的Qt


    一、宿主机环境搭建:

    编译需要x11库的支持,在Ubuntu下安装命令:

    sudo apt-get install libx11-dev libxext-dev libxtst-dev

    二、下载源码包:qt-everywhere-opensource-src-4.7.0.tar.gz

    三、解压源码包,查看Qt源码中是否有适合我们编译平台的配置文件,进入到源码目录下的qws目录下。ls 看一下,有一个适合我们的配置,就是linux-arm-gnueabi-g++ ,如果没有,就自己建一个目录,然后从别的目录下拷贝这两个文件

    qmake.conf 

    qplatformdefs.h

    进入到linux-arm-gnueabi-g++目录,看一下qmake.conf 的内容,如下:

    QMAKE_CC                = arm-none-linux-gnueabi-gcc

    QMAKE_CXX               = arm-none-linux-gnueabi-g++

    QMAKE_LINK              = arm-none-linux-gnueabi-g++

    QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-g++

    # modifications to linux.conf

    QMAKE_AR                = arm-none-linux-gnueabi-ar cqs

    QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy

    QMAKE_STRIP             = arm-none-linux-gnueabi-strip

    正确,我们就使用这个配置,如果不正确,可以改成自己的编译器的名字。

    四、配置:

    可以运行./configure --help 查看配置帮助

    配置命令:

    ./configure -opensource -embedded arm -xplatform qws/linux-arm-g++ -qt-libtiff -qt-libmng -no-mouse-tslib -qt-mouse-pc -no-mouse-linuxtp -qt-mouse-linuxinput -no-neon -qt-libjpeg -qt-libpng

    可以将配置编写进脚本文件。

    五、执行make –j4

    -j参数指定编译时的线程数,make –j不限制线程数。

    六、执行make install。

    默认安装路径为:/usr/local/Trolltech/QtEmbedded-4.7.0-arm

    七、配置环境变量(vim /etc/profile):

    #!/bin/sh

    export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm

    export QMAKEDIR=$QTDIR/qmake

    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    export PATH=$QMAKEDIR/bin:$QTDIR/bin:/opt/arm-linux-gcc/bin:$PATH

    export QMAKESPEC=qws/linux-arm-g++

    使环境变量有效的方法:1、注销,重新登录。2、source /etc/profile(只在本次终端中有效)

    测试搭建环境:qmake –v

    QMake version 2.01a

    Using Qt version 4.7.0 in /usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib

    出现上述文字则编译成功。

    八、交叉编译。

    编写Hello World程序,保存为hello.cpp。

    #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();

    }

    执行如下命令:

    1、  qmake –project(生成工程文件)

    2、  qmake (生成Makefile)

    3、  make (编译工程)

    九、开发板环境搭建及测试运行

    1、在开发板上新建目录/usr/local/Trolltech/QtEmbedded-4.7.0-arm,再把Ubuntu相同目录下的lib和plugins文件夹拷贝到该目录下。

    2、将libstdc++.so.6.0.9 和libz.so.1.2.3(这两个文件在交叉编译器的lib目录中) 传送到开发板的 /usr/local/lib 目录下。(在这个步骤中,有的资料拷贝librt,具体操作命令如:#cp /usr/local/arm/4.5.1/arm-none-linux-gnueabi/libc/lib/librt-2.11.1.so /root/rootfs/lib

         #cd /root/rootfs/lib

         #chmod 777 librt-2.11.1.so

         #ln -s librt-2.11.1.so librt.so.1)

    3、设置开发板环境变量:

    export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.7.0-arm/lib:/usr/local/lib

    4、测试运行:第八步中生成的文件下载到开发板中,执行命令:./hello –qws测试程序。

    附:开发板环境详细配置:

    export QWS_DISPLAY=:1

    export QTDIR=/usr/local/Trolltech/QtEmbedded-4.7.0-arm

    export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

    export QWS_MOUSE_PROTO="LinuxInput:/dev/touchscreen"

    export QT_QWS_FONFDIR=$QTDIR/lib/fonts/

    export QT_PLUGIN_PATH=$QTDIR/plugins

    遇到问题总结:

    1、  开发板上的程序不能显示中文汉字,可能是环境变量没有设置QT_QWS_FONFDIR(猜测,没有测试)。

    2、  在编译有数据库的程序时出错,说没有发现QsqlDatabase之类的,在生成的*.pro文件中加入QT += sql编译通过了。之前,还怀疑是在配置编译Qt时没有添加sql功能,还在配置中加入了-qt-sql-sqlite语句重新编译了Qt。。。

  • 相关阅读:
    IntelliJ IDEA 常用设置讲解
    Maven
    FileStram文件正由另一进程使用,该进程无法访问该文件,解决方法
    IIS 调用Microsoft.Office.Interop.Word.Documents.Open 返回为null
    .NET 中的 async/await 异步编程
    PHP表单验证内容是否为空
    PHP中的魔术变量
    PHP中的function函数详解
    PHP中的循环while、do...while、for、foreach四种循环。
    利用switch语句进行多选一判断。
  • 原文地址:https://www.cnblogs.com/windfall/p/5405185.html
Copyright © 2020-2023  润新知