luwanjia 发表于 2017-6-27 13:30:37

RK3288交叉编译Qt5源代码,并用QtCreator开发嵌入式UI

本帖最后由 luwanjia 于 2017-9-21 15:49 编辑

系统版本:
当期PC系统版本:Linux zorinos 4.8.0-56-generic #61~16.04.1-Ubuntu SMP Wed Jun 14 11:58:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
RK3288开发板: kernel4.4.55+Xubuntu16.04 (基于官方Firefly-rk3288_Ubuntu_16.04_201705250940.img修改,只是把其内核替换成了kernel4.4.55,因为默认VGA输出不支持)

1. 安装交叉编译器
    $sudo apt-get install gcc-arm-linux-gnueabihf
    $sudo apt-get install g++-arm-linux-gnueabihf

    (能用apt-get直接安装成功的跳过后面步骤)
    如果无法用apt-get安装,提示:Unable to locate package gcc-arm-linux-gnueabihf, 你需要单独下载交叉编译器,这里用的gcc5.4。
    $wget -c https://releases.linaro.org/comp ... ux-gnueabihf.tar.xz

    手动安装arm-linux-gnueabihf:
    $tar -xvf gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xz
    $mv gcc-linaro-5.4.1-2017.05-x86_64_arm-linux-gnueabihf arm-linux-gnueabihf-5.4.1 // 这里只不过是根据自己喜好重命名
    $sudo cp -rf arm-linux-gnueabihf-5.4.1 /opt// 这个路径也是自定义的,后面把环境变量配成一致就行

    修改用户目录下面的".bashrc"文件,在最后追加:PATH=$PATH:/opt/arm-linux-gnueabihf-5.4.1/bin
    执行以下命令立即生效:
    $source ~/.bashrc
    然后测试是否安装成功:
    $arm-linux-gnueabihf-gcc -v

2. Qt5源代码下载及openssl配置
    1> 选择版本Qt5.5.1
      为啥不选择其他更高版本? 负责任的告诉大家,编译不过!!! 目前尝试5.8和5.9都编译失败,很想吐槽Qt官方所谓的发布版本,其他版本还没有尝试。另一个原因就是RK3288开发板上面的libQt5Core.so的版本是5.5.1, 当然要版本一致才行,至于版本不一致会有什么问题,俺也不晓得。
      下载链接:http://download.qt.io/archive/qt ... ce-src-5.5.1.tar.xz
      建议:代码解压后最好在本地用git管理起来,这样方便还原以及清理。想重新编译只需要git clean -df就可以还原,非常方便。给git一个赞!

    2> 下载编译openssl
      Qt5.5.1的编译需要使用openssl库,用最新的openssl版本会有问题,一些定义找不到,这里用的是OpenSSL_1_0_1版本。

      a) 下载源代码
            $git clone https://github.com/openssl/openssl.git

      b) 获取OpenSSL_1_0_1版本的代码:
            $git checkout -b local_OpenSSL_1_0_1 OpenSSL_1_0_1
            (可以使用git tag -l查看openssl发布的所有版本号)

      c) 配置openssl
            $mkdir arm-openssl arm-ssl // 如果目录存在请删之或者清空,用于make install
            $cd openssl
            $setarch i386 ./config no-asm no-shared enable-ssl3 enable-ssl3-method --prefix=$PWD/../arm-openssl --openssldir=$PWD/../arm-ssl --cross-compile-prefix=arm-linux-gnueabihf-

      d) 编译
            $make // 如果提示-m32错误,请修改当前目录下面的Makefile文件,全局搜索-m32, 删除掉即可。然后重新make
            $make install

      e) 顺利的话,在arm-openssl目录中会生成相应的头文件和静态链接库。arm-ssl目录下面也会生成一些东西,暂时没用到,忽略。

      f) 分别复制openssl头文件和静态库文件到arm-linux-gnueabihf的include目录和和lib目录下,主要是方便之后编译直接链接,不需要修改make选项。当然,每个人的处理方式不一样,此步骤仅供参考。
            $cd arm-openssl
            $sudo cp -rf include/openssl /usr/arm-linux-gnueabihf/include/
            $sudo cp -rf lib/lib* /usr/arm-linux-gnueabihf/lib/
            (以上路径请根据编译器安装情况具体确定,请自行修改)

    到此,你已经具备了编译Qt5.5.1的一切条件,开工吧!

3. 编译Qt5.5.1
    1> 定义Qt5.5.1的SDK路径
      该路径非常重要,之后你的Qt5 SDK就会安装在此路径下,需要编译前配置好,否则路径不对导致之后Qt Creator无法正常使用此SDK。
      这里定义SDK路径为:/opt/qt-5.5.1-arm
      $sudo mkdir /opt/qt-5.5.1-arm

      (你可以根据自己喜好定义,但是编译完成后,如果需要移动到其他电脑上,你必须把SDK放在同样的目录下面)

    2> 修改qmake.conf文件
      $gedit qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
      将所有arm-linux-gnueabi都改成arm-linux-gnueabihf,如下:
      #
      # qmake configuration for building with arm-linux-gnueabihf-g++
      #


      MAKEFILE_GENERATOR      = UNIX
      CONFIG               += incremental
      QMAKE_INCREMENTAL_STYLE = sublib


      include(../common/linux.conf)
      include(../common/gcc-base-unix.conf)
      include(../common/g++-unix.conf)


      # modifications to g++.conf
      QMAKE_CC                = arm-linux-gnueabihf-gcc
      QMAKE_CXX               = arm-linux-gnueabihf-g++
      QMAKE_LINK            = arm-linux-gnueabihf-g++
      QMAKE_LINK_SHLIB      = arm-linux-gnueabihf-g++


      # modifications to linux.conf
      QMAKE_AR                = arm-linux-gnueabihf-ar cqs
      QMAKE_OBJCOPY         = arm-linux-gnueabihf-objcopy
      QMAKE_NM                = arm-linux-gnueabihf-nm -P
      QMAKE_STRIP             = arm-linux-gnueabihf-strip
      load(qt_config)

    3> 执行Configure
      $cd qt-everywhere-opensource-src-5.5.1
      $./configure -prefix /opt/qt-5.5.1-arm -opensource -nomake tests -nomake examples -opensource -xplatform linux-arm-gnueabi-g++
      注意:-prefix选项后面的路径就是上一步中定义的SDK路径

    4> 编译
      $make -j4
      (这里要编译好久,慢的话估计得编译个把小时,先干点别的去吧!)

    5> 安装
      $sudo make install
      (第1步定义的SDK路径需要root权限访问,请以root权限安装)

    到此,你的SDK就编译完成了。

4. 使用Qt Creator进行嵌入式开发
    1> 下载Qt Creator
      $wget -c http://download.qt.io/official_r ... ux-x86_64-4.3.0.run
      $sudo chmod +x qt-creator-opensource-linux-x86_64-4.3.0.run
      $sudo ./qt-creator-opensource-linux-x86_64-4.3.0.run

    2> 配置Qt Creator的交叉编译器及Qt Version
      a) 启动Qt Creator
      b) 选择--
      c) 配置Qt Versions,如图:
            
      d) 配置Kits,如图
            
      e) 配置编译器,如图
            
            
      
    3> 新建测试程序
      a) 创建UI测试程序,如图:
            
      b) 将编译好的可执行文件复制到开发板上运行
            运行之前,请在开发板上安装Qt5:
            $sudo apt-get install qt5-default
            (开发板上已经有firefly定制的libQt5Core.so库,安装完qt5-default之后,qt5相关的程序就能直接运行了)

            效果图:
            

    4> 编译好的Qt5 SDK分享
      链接: https://pan.baidu.com/s/1dEHm4GL 密码: nni3

      请解压到/opt目录,然后Qt Creator就可以配置它了。
   
5. 整个教程到此结束

ctb2016 发表于 2017-8-10 10:15:32

好帖,支持下,一直想做没时间做,好多界面性的软件需要用到qt,谢谢!

leeonshih 发表于 2017-9-20 11:02:19

你好,楼主,想请教一下, 编译的Qt5.5可以支持 opengl么?

luwanjia 发表于 2017-9-21 15:49:08

leeonshih 发表于 2017-9-20 11:02
你好,楼主,想请教一下, 编译的Qt5.5可以支持 opengl么?

不清楚,就是opengl es吧,没研究过

darkise 发表于 2018-2-27 15:02:00

正好是我需要的,多谢!

RICHYDUAN 发表于 2018-5-18 15:08:56

编译好的Qt5 SDK分享
      链接: https://pan.baidu.com/s/1dEHm4GL 密码: nni3
楼主,编译好的QT5 SDK能够再分享一下么,以上链接资源已经被删除了

luwanjia 发表于 2018-5-28 11:43:49

RICHYDUAN 发表于 2018-5-18 15:08
编译好的Qt5 SDK分享
      链接: https://pan.baidu.com/s/1dEHm4GL 密码: nni3
楼主,编译好的QT5 SD ...

我也找不到了,自己编译呗

yuanfj 发表于 2019-1-28 16:43:45

不知道为什么交叉编译的程序,在板子上运行,出现这个错误

807885535@qq.co 发表于 2019-10-13 22:35:30

请问arm版本的qmake 是怎么编译出来的?我用arm-linux-g++ 编译出来的qmake ABI 是x86版本的
我的qq 807885535

xiaoniu123 发表于 2019-12-11 16:47:44

大神 ,这个不需要安装tslib么
页: [1] 2
查看完整版本: RK3288交叉编译Qt5源代码,并用QtCreator开发嵌入式UI