• 编译 arm 版的qt


    因为项目需要,我们需要在开发板上使用QT开发平台,因此需要编译一个arm版的QT. 在网上找了一些资料,费了几天时间,终于成功了。

    第一步,准备源码

    先下载QT 源码,在http://qt-project.org/downloads页面,找到Qt libraries 4.8.6 for embedded Linux (230 MB) (Info), down 下来,拷贝到linux系统下。

    解压缩,tar -xzvf qt-everywhere-opensource-src-4.8.6.tar.gz

    qt 源码将被解压到qt-everywhere-opensource-src-4.8.6下。


    第二步,准备编译器

    然后安装交叉编译器,我们的arm 平台编译器已经安装好,安装在 /home/xyz/arm/ 目录下。

    为了使QT 配置程序能找到我们的编译器,必须把交叉编译器所在的目录放到PATH环境变量上。

    export PATH=$PATH:/home/xyz/arm/bin


    第三步,配置,编译,安装

    然后到QT的源码所在目录下,

    再进到qws目录下

    cd mkspecs/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

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


    接下来配置QT, 在QT的源码目录下有一个可执行程序 configure, 运行./configure --help 可以看到详细的配置选项,

    为了操作方便,可以写一个脚本文件,文容如下

    ./configure
    -embedded arm
    -xplatform qws/linux-arm-gnueabi-g++
    -release
    -opensource 
    -fast 
    -stl
    -no-accessibility 
    -no-scripttools 
    -no-mmx 
    -no-multimedia 
    -no-svg 
    -no-3dnow 
    -no-sse 
    -no-sse2 
    -no-libmng 
    -no-libtiff 
    -no-multimedia 
    -silent 
    -qt-libpng 
    -qt-libjpeg 
    -make libs 
    -nomake tools
    -nomake examples
    -nomake docs 
    -nomake demos
    -nomake translations
    -no-nis
    -no-cups
    -no-iconv 
    -no-dbus 
    -no-openssl 
    -little-endian
    -qt-freetype 
    -depths all
    -qt-gfx-linuxfb 
    -no-gfx-transformed 
    -no-gfx-multiscreen 
    -no-gfx-vnc 
    -no-gfx-qvfb 
    -qt-kbd-linuxinput 
    -no-glib 
    -no-phonon
    -no-phonon-backend
    -no-webkit
    -no-javascript-jit
    -no-sql-db2 
    -no-sql-ibase
    -no-sql-mysql
    -no-sql-oci
    -no-sql-odbc
    -no-sql-psql
    -no-sql-sqlite
    -no-sql-sqlite2
    -no-sql-sqlite_symbian
    -no-sql-symsql 
    -no-sql-tds
    -no-qt3support
    -qt-mouse-linuxinput
    -no-mouse-tslib
    -no-mouse-linuxtp
    -no-script
    -no-largefile

    保存,取名了qt.config.sh

    这个配置几乎把QT裁剪到了最小尺寸,运行此脚本,生成Makefile,

    然后gmake, 这个过程很慢,请耐心等待。

    然后gmake install, QT 库被安装到  /usr/local/Trolltech/QtEmbedded-4.8.6-arm


    第四步,测试QT arm 开发环境

    QT arm 版已经编译,安装完成。测试一下QT arm 开发环境

    设置环境变量

    export ARMQDIR=/usr/local/Trolltech/QtEmbedded-4.8.6-arm

    export PATH=$ARMQDIR/bin:$PATH

    export MANPATH=$ARMQDIR/man:$MANPATH

    export LD_LIBRARY_PATH=$ARMQDIR/LIB:$LD_LIBRARY_PATH


    执行qmake -v, 显示以下信息

    QMake version 2.01a
    Using Qt version 4.8.6 in /usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib

    执行which qmake, 显示

     /usr/local/Trolltech/QtEmbedded-4.8.6-arm/bin/qmake


    编写一个hello world 程序

    #include <QApplication>
    #include <QDebug>

    int main(int argc,char *argv[])
    {
            qDebug("Hello, welcome to Qt world!");
            return 0;
    }

    保存为hello.cpp

    执行qmake -project hello.cpp -o hello.pro

    生成hello.pro

    执行qmake hello.pro

    生成Makefile

    执行 make, 生成hello.o, hello


    这一步遇到一个奇怪的问题,就是如果工作目录下包含了子目录,则运行qmake就会hang在那儿,这不知是不是QT的bug.


    第五步,下载到开发板

    首先在开发板的linux 系统下建立同名的目录,以便拷贝,

    /usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib

    然后把/usr/local/Trolltech/QtEmbedded-4.8.6-arm/lib目录下的文件全部拷贝过去,我是打了一个包,然后用tftp传过去的。

    然后把 libstdc++.so.6.0.9 和libz.so.1.2.3 传送到开发板的 /usr/local/lib 目录下,

    设置环境变量 LD_LIBRARY_PATH 以便使QT 程序能找到相应的库,

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

    运行QT测试程序

    testgui -qws

    lcd 显示屏上显示出一个窗口界面,和在windows开发环境下显示出的界面基本相同。


    至此,算是成功了。不过还没有做对触摸屏的支持。

  • 相关阅读:
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_2_练习_使用递归计算1-n之间的和
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_02 递归_1_递归概念&分类&注意事项
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_8_File类遍历(文件夹)目录功能
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_7_File类创建删除功能的方法
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_6_File类判断功能的方法
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_5_File类获取功能的方法
    阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_4_File类的构造方法
    冒泡排序
    身份证验证合法性js--已验证
    演示工厂模式
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/7746560.html
Copyright © 2020-2023  润新知