当前位置:   article > 正文

交叉编译 QT5.12.2

交叉编译 QT5.12.2

环境:Ubuntu 18.04
交叉编译器:gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu
开发板类型:rk3399

1.安装交叉编译器
下载gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz

sudo tar jxvf gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz

2.设置环境变量
gedit ~/.bashrc
将gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu目录下bin的路径写在文件里
export PATH=$PATH:/用户目录/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin

3.测试交叉编译器是否可用
aarch64-linux-gnu-c++
linux-aarch64-gnu-g++

4.下载QT源码
在QT官网http://download.qt.io/ 下载相应的源码
并解压
sudo tar jxvf gqt-everywhere-src-5.12.2.tar.xz

5.将准备好的build_qt.sh脚本放到QT源码目录

#!/bin/sh  

PREFIX=/用户目录/qt5.12.2_aarch64_linux/ 
SYSROOT=/用户目录/rk3399-build/sysroot
export PKG_CONFIG_SYSROOT_DIR=${SYSROOT}
export PKG_CONFIG_LIBDIR=${SYSROOT}/usr/lib/pkgconfig:${SYSROOT}/usr/lib/aarch64-linux-gnu/pkgconfig:${SYSROOT}/lib/aarch64-linux-gnu/pkgconfig:${SYSROOT}/usr/share/pkgconfig
export PKG_CONFIG_PATH=${PKG_CONFIG_LIBDIR}
./configure -extprefix ${PREFIX}  \
-xplatform linux-aarch64-gnu-g++ \
-sysroot  ${SYSROOT} \
-opensource \
-release \
-shared \
-opengl es2 \
-directfb \
-confirm-license \
-pkg-config \
-qt-zlib  \
-qt-libpng \
-qt-libjpeg \
-qt-xcb	\
-qt-pcre \
-nomake examples \
-nomake tests \
-recheck-all 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

其中sysroot文件是之前在arm板上的头文件和库文件,这个后续补充

6.执行build_qt.sh脚本

./build_qt.sh
  • 1

确认需要编译的库都是开启的,并将其中没有安装的安装

当时有三个未安装,gperf bison flex

sudo apt install gperf bison flex
  • 1

安装之后删除一下

rm config.*
  • 1

7.make
根据电脑性能来

make -j6
  • 1

中途出现报错,发现是有的文件编译未完成,依赖项已经编译完成,导致找不到文件

make
  • 1

make一下,将文件编译完成

继续

make -j6
  • 1

中途遇到的问题:
①libpthread.so.0找不到,需要软连接

ln -s libpthread.so libpthread.so.0

  • 1
  • 2

②代码修改,编译过程中语法或编译器的问题,导致不能使用构造函数的方式,将代码修改一下:

    for (const QRect &rect : region) {
        DFBRegion dfbReg(rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y());
        m_dfbSurface->Flip(m_dfbSurface.data(), &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC));
    }
  • 1
  • 2
  • 3
  • 4
    for (const QRect &rect : region) {
        DFBRegion dfbReg = {rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()};
        m_dfbSurface->Flip(m_dfbSurface.data(), &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC));
    }
  • 1
  • 2
  • 3
  • 4

③由于需要使用到arm板上的头文件和库,需要将sysroot中的文件放到本机的/usr/lib/ 和 /lib文件夹中
sudo cp aarch64-linux-gnu/ /lib/ -r

 sudo cp aarch64-linux-gnu/ /usr/lib/ -r
  • 1

④在编译中需要编译器需要使用本地的一些头文件或库的时候,会找到sysroot的文件中去,这个时候需要将/usr/lib/和/lib/中的aarch64-linux-gnu文件夹删除或改名,使编译器查找到本机的目录和文件

⑤编译过程中出错,安装相应的库等

sudo apt install libssl1.0-dev
sudo apt install libnss3-dev
  • 1
  • 2

8.make install

make install -j6

  • 1
  • 2

编译完成

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/922937
推荐阅读
相关标签
  

闽ICP备14008679号