Ubuntu18.04中Qt环境和交叉编译的配置

目录

一:Ubuntu18.04中Qt环境的搭建

    1.下载Qt安装包

    2.安装

二.Qt简介

三.第一个Qt程序

    1.用QtCreator创建一个空的Qt项目(从零开始)

    2.给空的项目添加源文件

四.移植Qt库到开发板上去

五.配置Qt的ARM交叉编译套件


文章所需资料如下

链接:https://pan.baidu.com/s/1It8HTfpN7L91MZXi2owPAQ?pwd=8888 
提取码:8888

一:Ubuntu18.04中Qt环境的搭建


    1.下载Qt安装包


        从官网下载(download.qt.io)
        qt 5.9.1 版本linux版本的安装包文件名为 qt-opensource-linux-x64-5.9.1.run

    2.安装


        将下载好的安装包(qt-opensource-linux-x64-5.9.1.run)拷贝到共享目录
        运行虚拟机,打开Ubuntu18.04,进入到Qt安装包所在的路径
        如:
            将安装包拷贝到共享目录
            切换到共享目录
                cd /mnt/hgfs/Share
            确认安装包是否在该目录下
                ls
                如果能看到 qt-opensource-linux-x64-5.9.1.run 这个文件,则说明安装在该路径
            运行安装程序
                ./qt-opensource-linux-x64-5.9.1.run
                或者通过文件管理器找到安装包双击运行
            根据安装向导安装Qt程序,有 skip 就 skip,有下一步就下一步,直到安装完成
            安装完成以后,会自动打开QtCreator

            QtCreator就是Qt的主程序了,平时编写Qt程序都是在该软件下编写的
            建议大家在任务栏中,右键点击QtCreator的图标,选择 添加到收藏夹,
            这样的话,在Ubuntu的任务栏中就会有一个Qt的图标了,下次要运行Qt,直接点击该图标就可以了

        安装完Qt软件以后,新建一个带界面的Qt项目,运行时会报错:找不到 -lGL 这个库
        问题原因:
            QtCreator在运行程序的时候,依赖于系统的一个库,库名为 GL,
            在编译完后,链接的时候需要找到这个库才能正常运行

        解决办法:
            在 Ubuntu18.04的 /usr/lib/x86_64-linux-gnu 目录下 有一个名为 libGL.so.1.0.0 的动态库文件
            这个文件就是Qt在运行程序是所需要链接的库文件,只是它的路径以及文件名不符合Qt的扫搜条件
            所以,我们只要将这个文件在指定的路径下为其创建一个符合Qt扫搜路径的软链接文件就可以了:
                sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0 /usr/lib/libGL.so

二.Qt简介


    官网:qt.io
    Qt是一个基于C++的跨平台的应用程序开发框架
    目前支持三种语言:
        C++
        qml
        python

    跨平台:
        一次编写,到处编译
        在QtCreator中写一次代码,就可以生成不同平台的版本的程序
        主流的平台都支持,如:Windows、Linux、Android、MacOs...

    应用程序:
        主要用于GUI(图形用户界面)程序开发,但又不仅仅只是进行GUI设计,还可以用于后台或者底层程序的开发

    开发框架:
        有现成的库可供使用,不需要从零开始,可以节省时间/精力/金钱,提高开发效率


    Qt始于1991年,中间经历了多个版本,目前主流的版本是Qt5和Qt6
    从许可协议的角度,Qt还可以分为商业版和开源版。

    QtCreator是一个IDE集成开发工具,包含了代码编辑器、编译器、调试器、链接器...
    一键编译执行


三.第一个Qt程序


    1.用QtCreator创建一个空的Qt项目(从零开始)


        欢迎 -> new project -> 其他项目 -> empty qmake project

    2.给空的项目添加源文件


        右键点击左侧项目栏中的项目名称,选择 添加新文件
        在弹出的对话框中选择 C++ -> C++ source file -> 文件名设置为 main -> 完成
        在项目目录中会多一个 Sources 的目录,里面就存了该项目中的所有.cpp文件(源文件)
        双击 Sources目录中的 main.cpp,进行编辑

        如果需要显示界面,那么就需要在项目的.pro文件中添加界面模块
        双击 项目目录中的 xxxx.pro 文件,在该文件中输入以下代码(添加界面模块):
            QT += widgets
        只有添加了这个模块,才能使用Qt中界面相关的类型


    C++中的动态内存分配:
        在C++中,有类的概念,在给对象分配内存的时候,需要调用对应的构造函数,
        来完成对象的初始化
        在释放对象的时候,需要调用析构函数来完成对象的收尾工作

        所以,C语言中的动态内存分配方法在C++中不太适用
        因此,C++引入了两个关键字:new 和 delete
        new 用来动态分配内存
        delete 用来释放对象的内存
        new 在实例化对象的时候,会自动调用构造函数来完成对象的初始化
        delete 在释放对象的时候,会自动调用析构函数来完成对象的收尾工作

        new 分配的存储区,我们称之为自由存储区
        而malloc分配的存储区是在堆空间

        用malloc在分配空间的时候,不能赋初始值
        用new分配空间的时候,可以初始化

    new 和 delete 的用法:
        用new来分配一个变量的存储空间:
            int *pdata = new int;
            int *pdata = new int{15};   //分配空间的同时进行初始化
            int *pdata = new int(15);   //分配空间的同时进行初始化

        用new来分配一个对象的存储空间:
            class Test
            {
            public:
                Test(){}    //默认构造函数
                Test(int d1,char d2,float d3)
                {
                    data1 = d1;
                    data2 = d2;
                    data3 = d3;
                }

            private:
                int data1;
                char data2;
                float data3;
            };

            Test *pts1 = new Test;  //调用默认构造函数
            Test *pts2 = new Test{6,'a',3.14};  //调用有参构造函数

        用new来分配数组:
            int *array = new int[100];  //分配一个有100个元素的数组
            int *array = new int[100]{1,2,3,4,5,6,7,8,9,10};    //分配空间的同时设置初始值,没有设置的部分默认为0

        用delete释放一个变量或者对象的存储空间:
            delete pdata;
            delete pts1;

        用delete释放一个数组:
            delete []array;


四.移植Qt库到开发板上去


    将 qt-armlib-591.tar.gz 文件拷贝到Ubuntu的共享目录
    进入该共享目录,找到该文件
        cd /mnt/hgfs/Share/工具资料/
        ls
        如果能找到 qt-armlib-591.tar.gz 这个文件,就可以继续往后面操作
    解压该文件,建议解压到Ubuntu的 /opt 目录
        sudo tar xvf qt-armlib-591.tar.gz -C /opt

    解压完成以后,在 /opt 目录中,会生成一个 qt-armlib-591 的目录
    该目录中有两个目录的内容是需要传输到开发板上去的:lib、plugins
    所以,将这个两个目录进行归档,做成一个归档文件,然后再传输到开发板上去
        sudo tar zcvf qt-6818lib.tar.xz lib plugins
    归档完成以后,在该目录下就会生成一个 qt-6818lib.tar.xz 的归档文件
    这个文件比较大,有20Mb,如果用串口传输,需要传很久,建议用U盘或者网络传输
        先将归档文件传输到Windows的工项目录,然后再通过U盘进行传输
            cp qt-6818lib.tar.xz /mnt/hgfs/Share

        当U盘接到开发板上以后,会将U盘的文件挂载到开发板的文件系统,挂载的路径为:
        /mnt/udisk
        也有一部分的U盘插上以后,在udisk目录中看不到数据(SecureCRT不能显示中文,字符编码不同)
        此时就需要手动去挂载U盘
            自行百度
        挂载好U盘以后,进入到挂载目录 /mnt/udisk,就可以看到U盘中的文件了
        
    将开发板上老版本的Qt库删除
        cd /usr/local/Qt-Embedded-5.7.0
        rm -rf lib plugins

    将qt-6818lib.tar.xz归档文件解压到开发板的Qt库路径中去
        cd /mnt/udisk
        tar xvf qt-6818lib.tar.xz -C /usr/local/Qt-Embedded-5.7.0
    等待解压完成

五.配置Qt的ARM交叉编译套件


    打开Ubuntu中的QtCreator
    找到菜单栏中的 工具 -> 选项 -> 构建和运行
    选择 构建和运行中的 编译器 页,选择 添加 -> GCC -> C
        可以通过 sudo find -name arm-linux-gcc 找到C语言交叉编译器所在的路径
    名称设置为 arm-linux-gcc
    编译器的路径就是上面查找的结果(绝对路径),一般为:/usr/local/arm/5.4.0/usr/bin/arm-linux-gcc
    点击 Apply 保存

    配置C++编译器:
    选择 添加 -> GCC -> C++
    名称设置为 arm-linux-g++
    编译器路径设置为C++交叉编译器的路径,一般为:/usr/local/arm/5.4.0/usr/bin/arm-linux-g++
    点击 Apply 保存

    配置Qt编译器版本:
    选择 构建和运行中的 Qt versions,选择 添加
    会弹出一个文件选择对话框,只能选择 qmake 文件
    要选择的是arm版本的qmake文件,所在的路径就是前面解压qt-armlib-591.tar.gz之后的路径 
        /opt/qt-armlib-591/bin/qmake
    点击 Apply 保存

    配置Qt ARM 编译套件:
    选择 构建和运行中的 构建套件 选择 添加
    名称设置为 Arm Qt 5.9.1 GCC
    设备类型设置为 通用linux设备
    C语言编译器设置为 arm-linux-gcc
    C++语言编译器设置为 arm-linux-g++
    Qt版本设置为 Qt5.9.1(qt-armlib-591)
    点击 Apply 保存
    点击 OK 退出


    如果项目已经存在,关闭项目
    删除项目源码目录中的 xxx.user 文件
    重新打开项目
    在 Configure Project 对话框中,将 ARM Qt 5.9.1 GCC 选上
    选择 Configure Project 按钮

    在项目中选择编译套件
        见图 在项目中选择编译套件.jpg

    注意,如果是用 ARM套件来编译,那么不能在PC上运行
    所以,只能点击左下角的锤子(构建)

    构建完成以后,在项目源码的同级目录下有一个类似于 build-widgets-ARM_Qt_5_9_1_GCC-Release 的构建目录
    在该目录中的widgets(项目名称)文件就是最终传输到开发板上去运行的文件

你可能感兴趣的:(qt,开发语言)