交叉编译 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 

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

6.执行build_qt.sh脚本

./build_qt.sh

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

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

sudo apt install gperf bison flex

安装之后删除一下

rm config.*

7.make
根据电脑性能来

make -j6

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

make

make一下,将文件编译完成

继续

make -j6

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

ln -s libpthread.so libpthread.so.0

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

    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));
    }
    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));
    }

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

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

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

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

sudo apt install libssl1.0-dev
sudo apt install libnss3-dev

8.make install

make install -j6

编译完成

你可能感兴趣的:(交叉编译 QT5.12.2)