• linux上交叉编译qt库


    linux上交叉编译qt库

    Qt程序从X86平台Linux移植到ARM平台Linux需要做什么

    1.在ubuntu上使用qt的源码交叉编译出Qt库

    2.将编译好的库拷贝到开发板上并设置相应的环境变量(库路径啥的)

    前两步一劳永逸,做一次就行

    3.X86上写好程序代码,通过交叉工具链进行程序的交叉编译,(动态)链接交叉编译的Qt库,或者厂商提供的Qt-sdk(友善),总之不能直接用开发板文件系统里的Qt库,那个是在arm上运行的

    4.程序拷贝到开发板上运行

    qt源码下载

    https://blog.csdn.net/Mculover666/article/details/126307077?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169876081416800185832737%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169876081416800185832737&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-8-126307077-null-null.142^v96^pc_search_result_base8&utm_term=%E9%87%8E%E7%81%AB%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91qt&spm=1018.2226.3001.4187
    
    • 1
    wget https://download.qt.io/archive/qt/5.12/5.12.9/single/qt-everywhere-src-5.12.9.tar.xz
    
    • 1

    image-20231101091817411

    下载得到的qt源码包

    image-20231101092107232

    使用下面命令进行解压

    xz -d qt-everywhere-src-5.12.9.tar.xz
    
    • 1

    image-20231101092452624

    tar -xf qt-everywhere-src-5.12.9.tar
    
    • 1

    image-20231101092844986

    进入解压后的目录如下:

    image-20231101093303229

    修改配置文件qmake.conf

    修改qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf文件

    image-20231101103455408

    使用vim编辑器打开qmake.conf

    vim qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
    
    • 1

    打开qmake.conf文件如下图:

    image-20231101104353417

    要添加的内容如下:

    QT_QPA_DEFAULT_PLATFORM = linuxfb
    QMAKE_CFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
    QMAKE_CXXFLAGS += -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard
    
    • 1
    • 2
    • 3

    生成makefile

    由于要输入的命令比较多,创建一个shell脚本,把命令放入脚本文件中,创建一个autoconfigure.sh的脚本文件

    touch autoconfigure.sh
    
    • 1

    image-20231101104908913

    将要执行的命令,拷贝到autoconfigure.sh文件中。这里注意第3行是指定交叉编译后要安装的目录,根据自己情况进行调整。

    #!/bin/sh
    ./configure -v \
    -prefix /home/cwz/qt_build/qt-everywhere-src-5.12.9/armqt5.12.9 \
    -opensource \
    -confirm-license \
    -release \
    -strip \
    -shared \
    -xplatform linux-arm-gnueabi-g++ \
    -optimized-qmake \
    -c++std c++11 \
    --rpath=no \
    -pch \
    -skip qt3d \
    -skip qtactiveqt \
    -skip qtandroidextras \
    -skip qtcanvas3d \
    -skip qtconnectivity \
    -skip qtdatavis3d \
    -skip qtdoc \
    -skip qtgamepad \
    -skip qtlocation \
    -skip qtmacextras \
    -skip qtnetworkauth \
    -skip qtpurchasing \
    -skip qtremoteobjects \
    -skip qtscript \
    -skip qtscxml \
    -skip qtsensors \
    -skip qtspeech \
    -skip qtsvg \
    -skip qttools \
    -skip qttranslations \
    -skip qtwayland \
    -skip qtwebengine \
    -skip qtwebview \
    -skip qtwinextras \
    -skip qtx11extras \
    -skip qtxmlpatterns \
    -make libs \
    -make examples \
    -nomake tools -nomake tests \
    -gui \
    -widgets \
    -dbus-runtime \
    --glib=no \
    --iconv=no \
    --pcre=qt \
    --zlib=qt \
    -no-openssl \
    --freetype=qt \
    --harfbuzz=qt \
    -no-opengl \
    -linuxfb \
    --xcb=no \
    -tslib \
    --libpng=qt \
    --libjpeg=qt \
    --sqlite=qt \
    -plugin-sql-sqlite \
    -I/opt/tslib1.4/include \
    -L/opt/tslib1.4/lib
    exit
    
    • 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
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63

    给脚本autoconfigure.sh添加可执行权限

     sudo chmod 777 autoconfigure.sh 
    
    • 1

    image-20231101144629808

    执行脚本

    按照下面命令,执行脚本。

    ./autoconfigure.sh 
    
    • 1

    image-20231101151658890

    执行完上述脚本后,会生成一个makefile文件,接下来执行make命令,

    make
    
    • 1

    然后接着执行make install命令

    make install
    
    • 1

    出现下面的错误,一种是没权限,这里我准备加上sudo,还有一个缺少python

    image-20231101205011370

    错误sh: 1: python: not found Project ERROR: Building QtQml requires Python.

    解决:

    安装Python资源包

    sudo apt install python3.8
    
    • 1

    2.找到资源包的位置

    which python3
    
    • 1

    image-20231101205447448

    将其拷贝到/usr/bin/python目录下

    sudo cp -r /usr/bin/python3 /usr/bin/python
    
    • 1

    解决了上述的错误后,重新执行make install命令。就可以了,会需要很长一段时间的。

    编译完成后,在/home/cwz/qt_build/qt-everywhere-src-5.12.9/armqt5.12.9目录(这个目录是我们在autoconfigure.sh脚本中第3行指定的安装目录)下生成的文件如下图:

    image-20231120145516349
    至此,qt库的交叉编译就完成了。

  • 相关阅读:
    vue里面如何动态添加class类名和style样式
    Hash Index 原理和应用精讲
    关于RabbitMQ的小总结
    【牛客刷题-SQL大厂面试真题】NO5.某宝店铺分析(电商模式)
    C#8.0本质论第八章--接口
    javascript中数组和对象的解构
    Hammer.js - 旋转 拖拽 移动 缩放
    Camtasia studio2023电脑全屏录像机下载
    Vision Transformer学习
    React 实现文件分片上传和下载
  • 原文地址:https://blog.csdn.net/colortztzztzt/article/details/134509428