Hi3531DV200/SS528/GK7628 aarch64-mix210-linux编译QT4.8.7解决死锁问题

2 篇文章 2 订阅

一.问题起因

        之前的QT程序在arm32处理器上用着没问题,但是在arm64上进程会卡死,可以kill掉重新运行,经过分析调试将问题大概定位在QThread中发出信号导致的。之后使用QT5.15.2编译使用没这个问题,但是程序兼容性有些问题,于是尝试在QT4上解决问题。

二.打入补丁

访问qt4-4.8.6\qt4\recipes-qt\meta - openembedded-core - OpenEmbedded Core layer

下载如下4个patch文件至解压后的源码目录,输入下面命令打入补丁(补丁是针对qt4.8.6版本的,我先在qt4.8.6版本上打入对应的补丁,然后编译验证不存在死机的问题,最后在qt4.8.6版本上根据补丁内容进行改动,问题也得到了解决。)

patch -p1 < 0029-aarch64_arm64_fix_arch_detection.patch

patch -p1 < 0030-aarch64_arm64_qatomic_support.patch

patch -p1 < 0031-aarch64_arm64_mkspecs.patch

patch -p1 < 0032-aarch64_add_header.patc

三.编译QT

1.将目录及内容mkspecs\qws\linux-arm-g++\ 拷贝一份,命名位mkspecs\qws\linux-aarch64-mix210-g++\;

2.修改mkspecs\qws\linux-aarch64-mix210-g++\qmake.conf文件,内容如下:

#
# qmake configuration for building with aarch64-mix210-linux-g++
#

include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)

# modifications to g++.conf
QMAKE_CC                = aarch64-mix210-linux-gcc
QMAKE_CXX               = aarch64-mix210-linux-g++
QMAKE_LINK              = aarch64-mix210-linux-g++
QMAKE_LINK_SHLIB        = aarch64-mix210-linux-g++
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS -std=gnu++98
QMAKE_CFLAGS           += -march=armv8-a
QMAKE_CXXFLAGS         += -march=armv8-a

# modifications to linux.conf
QMAKE_AR                = aarch64-mix210-linux-ar cqs
QMAKE_OBJCOPY           = aarch64-mix210-linux-objcopy
QMAKE_STRIP             = aarch64-mix210-linux-strip

load(qt_config)

3.在QT源码根目录运行configure命令,详细参数如下:

./configure -opensource -confirm-license --prefix=/home/ubuntu/workspace/qt/4.8.7/linux-aarch64-mix210-g++ -xplatform qws/linux-aarch64-mix210-g++ -arch aarch64 -embedded aarch64 -qt-freetype -qt-mouse-pc -no-webkit -no-largefile -fast -release -no-qt3support -no-opengl -no-phonon -no-phonon-backend -no-scripttools -qt-libjpeg -no-libtiff -no-gif -no-libmng -no-nis -no-cups -no-svg -nomake examples -nomake demos -nomake docs -nomake tools

4.运行 make -j4 进行编译,"-j4"参数根据自己电脑处理器内核总数而定,经过几分钟编译完成;

5.运行 make install 进行安装,安装目录为第3步设置的prefix参数。

   注意:如果切换编译器需要运行如下指令,特别是要删除.obj/ .pch/这两个目录,否则会遇到一些麻烦的错误:        

make clean
make confclean
rm -rf .obj/ .pch/

四.结束

至此QT打补丁和编译安装完成,通过打补丁之后,编译过程顺畅,无需改动其它文件。

然后可以在Qt Creator中配置好上文编译好的Qt。

打补丁和将补丁移植到qt4.8.7上有点麻烦,大家需要的话可以私信我整理出来。

板端运行环境变量

export QT_ROOT=/app/qt4
export QT_PLUGIN_PATH=${QT_ROOT}/plugins
export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:${QT_ROOT}/lib
export QT_QWS_FONTDIR=${QT_ROOT}/fonts
export QWS_DISPLAY=linuxFB:/dev/fb0
/app/mainwindow -qws
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值