• Qt5.9.9交叉编译(带sqlite3、OpenSSL)


    1、交叉编译工具链

          这里ARM平台是ARM CortexA9的,一般交叉编译工具链demo板厂商都会提供,若未提供或想更换新版本的交叉编译工具链可参考以下方式获取。

    1.1 下载适用于ARM CortexA9的交叉编译工具链

    Linaro Releases下载gcc4的最新版xxxx-i686_arm-linux-gnueabihf.tar.xz

    1.2 配置交叉编译工具链

    1.2.1 解压下载好的工具链包

    $ tar xvf gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf.tar.xz

    1.2.2 部署并配置工具链

    拷贝到系统路径

    $ sudo mv gcc-linaro-4.9.4-2017.01-i686_arm-linux-gnueabihf /usr/local/arm-linux-gnueabihf

    配置环境变量

    1. $ vim ~/.bashrc
    2. 在文件末加入环境变量
    3. export PATH=/usr/local/arm-linux-gnueabihf/bin:$PATH
    4. 使环境变量生效
    5. $ source ~/.bashrc

    检验工具链是否正常使用

    1. $ arm-linux-gnueabihf-gcc -v
    2. 使用内建 specs。
    3. COLLECT_GCC=arm-linux-gnueabihf-gcc
    4. COLLECT_LTO_WRAPPER=/usr/local/arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.4/lto-wrapper
    5. 目标:arm-linux-gnueabihf
    6. 配置为:/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/snapshots/gcc-linaro-4.9-2017.01/configure SHELL=/bin/bash --with-mpc=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-mpfr=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-gmp=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu --with-gnu-as --with-gnu-ld --disable-libmudflap --enable-lto --enable-objc-gc --enable-shared --without-included-gettext --enable-nls --disable-sjlj-exceptions --enable-gnu-unique-object --enable-linker-build-id --disable-libstdcxx-pch --enable-c99 --enable-clocale=gnu --enable-libstdcxx-debug --enable-long-long --with-cloog=no --with-ppl=no --with-isl=no --disable-multilib --with-float=hard --with-mode=thumb --with-tune=cortex-a9 --with-arch=armv7-a --with-fpu=vfpv3-d16 --enable-threads=posix --enable-multiarch --enable-libstdcxx-time=yes --with-build-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/sysroots/arm-linux-gnueabihf --with-sysroot=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu/arm-linux-gnueabihf/libc --enable-checking=release --disable-bootstrap --enable-languages=c,c++,fortran,lto --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/home/tcwg-buildslave/workspace/tcwg-make-release/label/docker-trusty-i386-tcwg-build/target/arm-linux-gnueabihf/_build/builds/destdir/i686-pc-linux-gnu
    7. 线程模型:posix
    8. gcc 版本 4.9.4 (Linaro GCC 4.9-2017.01)

     2、SQLite交叉编译

        在后面交叉编译Qt源码的时候会用到

    2.1 SQLite源码获取

    SQLite Download Page下载最新版sqlite-autoconf-xxxx.tar.gz SQLite源码

    2.2 交叉编码

    1. 解压源码
    2. $ tar -xvf sqlite-autoconf-3360000.tar.gz
    3. 到源码路径
    4. $ cd sqlite-autoconf-3360000/
    5. 配置编译
    6. $ ./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux --prefix=/opt/arm_sqlite
    7. 构建
    8. $ make
    9. 安装
    10. $ sudo make install

     3、OpenSSL交叉编译

        Qt使用SSL时需用到OpenSSL库。

    3.1 下载OpenSSL源码

    Releases · openssl/openssl · GitHub下载OpenSSL_1_x_x最新版的,因为Qt5.9只支持OpenSSL_1的环境,这里下载OpenSSL_1_1_1k 

    3.2 交叉编译

    1. 解压
    2. @ tar -xvf openssl-OpenSSL_1_1_1k.tar.gz
    3. 进入到源码路径
    4. @ cd openssl-OpenSSL_1_1_1k/
    5. 配置为静态编译,注意这里的/home/xxx是当前用户路径,xxx代表当前用户名
    6. @ ./config -fPIC no-shared no-asm --prefix=/home/xxx/arm_openssl --cross-compile-prefix=arm-linux-gnueabihf-
    7. 修改Makefile
    8. @ vim Makefile
    9. 搜索并将-m64删除
    10. 编译
    11. @ make -j4
    12. 安装
    13. @ make install

    4、Qt交叉编译

    4.1 下载Qt5.9.9源码

    https://download.qt.io/archive/qt/5.9/5.9.9/single/下载Qt5.9.9源码

    4.2 配置编译
     

    1. 解压qt源码包
    2. $ tar xvf qt-everywhere-opensource-src-5.9.9.tar.xz
    3. 进入到源码目录
    4. $ cd qt-everywhere-opensource-src-5.9.9

    4.2.1 配置qtbase/mkspecs/qmake.conf文件

    1. #
    2. # qmake configuration for building with arm-linux-gnueabihf-g++
    3. #
    4. MAKEFILE_GENERATOR = UNIX
    5. CONFIG += incremental
    6. QMAKE_INCREMENTAL_STYLE = sublib
    7. QT_QPA_DEFAULT_PLATFORM = linuxfb #eglfs
    8. QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a
    9. QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
    10. include(../common/linux.conf)
    11. include(../common/gcc-base-unix.conf)
    12. include(../common/g++-unix.conf)
    13. QMAKE_INCDIR += /opt/arm_sqlite/include #已编译的sqlite头文件路径
    14. QMAKE_LIBDIR += /opt/arm_sqlite/lib #已编译的sqlite库路径
    15. QMAKE_INCDIR += /home/wzl/arm_openssl/include #已编译的openssl头文件路径
    16. QMAKE_LIBDIR += /home/wzl/arm_openssl/lib #已编译的openssl库路径
    17. # modifications to g++.conf
    18. QMAKE_CC = arm-linux-gnueabihf-gcc
    19. QMAKE_CXX = arm-linux-gnueabihf-g++
    20. QMAKE_LINK = arm-linux-gnueabihf-g++
    21. QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
    22. # modifications to linux.conf
    23. QMAKE_AR = arm-linux-gnueabihf-ar cqs
    24. QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
    25. QMAKE_NM = arm-linux-gnueabihf-nm -P
    26. QMAKE_STRIP = arm-linux-gnueabihf-strip
    27. load(qt_config)

    4.2.1 编写构建脚本

    1. $ vim build.sh
    2. 内容如下:
    3. #!/bin/sh
    4. ./configure \
    5. -v \
    6. -prefix /home/wzl/workspace/Arm_Qt5.9.4 \
    7. -release \
    8. -opensource \
    9. -no-accessibility \
    10. -make libs \
    11. -xplatform linux-arm-gnueabi-g++ \
    12. -optimized-qmake \
    13. -pch \
    14. -sqlite \
    15. -qt-zlib \
    16. -openssl-linked \
    17. -no-sse2 \
    18. -no-openssl \
    19. -opengl es2 \
    20. -no-cups \
    21. -no-glib \
    22. -no-iconv \
    23. -no-pkg-config \
    24. -no-separate-debug-info \
    25. -skip qt3d \
    26. -skip qtcanvas3d \
    27. -skip qtdoc \
    28. -skip qtwayland
    29. exit

    4.2.3 编译

    1. 配置执行权限
    2. $ sudo chmod 777 build.sh
    3. $ ./build.sh

  • 相关阅读:
    【考研】栈在表达式求值中的应用(真题分析)
    无动物型胶原酶丨Worthington的多种应用方案
    C# wpf 实现任意控件(包括窗口)更多拖动功能
    【QT基础入门】QT中的容器类
    OpenText 安全取证软件——降低成本和风险的同时,简化电子取证流程
    Lumiprobe 亚磷酰胺丨六甘醇亚磷酰胺说明书
    ARM接口编程—WDT(exynos 4412平台)
    17_C++_面向对象_构造函数_析构函数
    mysql是如何查询数据的?
    Codeforces Round #836 (Div. 2)
  • 原文地址:https://blog.csdn.net/w1820020635/article/details/118467662