交叉编译及裁剪QT5.9(不使用Qt Creator)

本文详细描述了如何从LinuxARM架构下载和解压Qt5.9.6源码,修改配置以适应Aarch64,进行编译、安装,并在开发板上移植和配置QT环境,包括注意的问题和优化QTbase大小的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:下载源码

        下载qt-everywhere-opensource-src-5.9.6.tar.xz源码包并解压

        tar -xvf qt-everywhere-opensource-src-5.9.6.tar.xz -C ./

        cd qt-everywhere-opensource-src-5.9.6

二:修改配置及编译安装

        1:修改qmake.conf

                vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

             将所有的arm-linux-gnueabi**改为aarch64-linux-gnu**(aarch64-linux-gnu自己的工具链),并去掉-lts(这个是支持触摸屏的,这里不需要)

    

                更改前:

                

        更改后:

        2:配置config        

                ./configure -prefix /usr/local/qt5.9 \

                    -opensource \

                    -debug \

                    -confirm-license \

                    -xplatform linux-arm-gnueabi-g++ \

                    -no-opengl \

                    -no-pch \

                    -shared \

                    -no-iconv \

                    -no-xcb \

        3:make -j24  & make install

三:移植到开发板

       1:将/usr/local/qt5.9整个文件夹拷贝到开发板/nfs/xxx/

       2:在开发板设置QT环境变量

        export QTDIR=/nfs/xxx/qt5.9
        export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
        export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins
        export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
        export QT_DEBUG_PLUGINS=0
        export QWS_SIZE=1920X1080
        export QT_QPA_FONTDIR=$QTDIR/fonts

        3:在windows主机C:/Windows/Fonts/里拷贝一个包含汉字的字体到开发板$QTDIR/fonts目录

四:写一个简单程序验证

        1:新建文件夹test,在里面新建一个main.cpp文件,内容如下:       

        #include <QApplication>
        #include <QtWidgets>
        int main(int argc, char *argv[])
        {
            QApplication app(argc, argv); 
            QWidget window;
            window.resize(800, 800);
            window.setWindowTitle("Hello, world!");
            window.show();
            return app.exec();
        }

        2:进入到test文件夹,在终端输入/usr/local/qt5.9/bin/qmake -project 即可生成一个test.pro文件

        3:在终端输入usr/local/qt5.9/bin/qmake 即可生成Makefile文件

        4:修改Makefile,增加QtWidgets 路径及库链接

               INCPATH =-I/usr/local/qt5.9/include/QtWidgets  ......

               LIBS = -lQt5Widgets ........

        5:  make  即可生成可执行程序,拷贝到开发板运行即可

五:注意问题

        1:程序运行提示缺少动态库,有可能环境变量设置错误,找不到对应的库,有可能有依赖库没有考到开发板,比如工具链里的库,开发板里没有,提示缺少什么库就拷什么库到开发板

        2:程序运行正常,但无显示,QT默认编码格式是ARGB32,所以需要将对应的fb0也改成这个格式

        3:改了fb0格式,依旧无显示,需要fb0需要show,且不能close,否则无显示,总而言之,如果无显示,可以将fb0的数据读出来,看QT是否有写入,如果有写入,就去看格式是否对上,格式对不上有可能花屏或者无显示(刚好设置成了透明),如果格式都对,就要考虑fb0是否是需要show才可以

        4:这个版本QT已经支持了键鼠,只要内核支持标准的USB输入子系统,则插上键鼠就能用,但不支持热拔插,需要先插上键鼠,再启动QT程序

        5:删除QT自带的鼠标,增加编译选项QT_NO_CURSOR,具体方法是./configure 上增加-no-feature-cursor,加上这个选项后make和make install 会报错,不用理会不影响,增加此选项后插入鼠标则不会显示鼠标图标了

        6:按照第5步重新编译后,拔出鼠标时还是会一直报错:evdevmouse: Could not read from input device (No such device),影响程序运行。解决办法:内核选项关闭#CONFIG_INPUT_EVDEV=y 即可

六:裁剪及编译QT base

        以上步骤编译出来的QT库libQt5Gui libQt5Core libQt5Widgets 加起来几百M了,整个qt5.9好几十个G了,肯定没办法满足开发板flash,基本开发板上的应用基本上只需要QT基础功能,所以重新编译QT base,编译出来的库加起来10M左右。

        1:cd qt-everywhere-opensource-src-5.9.6/qtbase/

        2:./configure -prefix /home/hfzuo/work/qt_install  -xplatform linux-aarch64-gnu-g++ -no-opengl -opensource -confirm-license -release  -shared

        3:make -j24 & make install

        4:将libQt5Core.so.5  libQt5Widgets.so.5 libQt5Gui.so.5  考到开发板usr/local/lib plugins/platforms/libqlinuxfb.so 带目录拷贝到开发板usr/local

        5:配置环境变量

        export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
        export QT_QPA_PLATFORM_PLUGIN_PATH=usr/local
        export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
        export QT_DEBUG_PLUGINS=0
        export QWS_SIZE=1920X1080
        export QT_QPA_FONTDIR=/usr/local/fonts(从windos拷贝的字库)

        

      

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值