官网下载:http://download.qt.io/archive/qt/4.8/4.8.6/
tar -zxvf qt-everywhere-opensource-src-4.8.6.tar.gz
进入目录:cd qt-everywhere-opensource-src-4.8.6
(1)将qmake.conf文件中的编译工具链换成arm-hisiv300-linux
备份原配置文件:
cp ./mkspecs/qws/linux-arm-g++ ./mkspecs/qws/linux-arm-g++_old -r
cd qt-everywhere-opensource-src-4.8.6
vi ./mkspecs/qws/linux-arm-g++/qmake.conf
(打开文件后在命令模式下输入下面命令,将文件中的arm-linux全部替换成arm-hisiv300-linux)
:%s/arm-linux/arm-hisiv300-linux/g
在load(qt_config)上面添加下面三行
# modifications to gcc-base.conf
QMAKE_CFLAGS_RELEASE += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
QMAKE_CXXFLAGS_RELEASE += -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
注:上面两行配置可参考海思目录MPP下配置Makefile.param //在第200行左右
# LIB GLOBAL CFLAGS
ifeq ($(HIARCH),hi3521a)
export LIBS_CFLAGS = -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
export LIBS_LD_CFLAGS = -mcpu=cortex-a7 -mfloat-abi=softfp -mfpu=neon-vfpv4 -mno-unaligned-access -fno-aggressive-loop-optimizations
endif
(2)修改qplatformdefs.h文件,在文件末尾添加
#vi ./mkspecs/qws/linux-arm-g++/qplatformdefs.h
#undef O_CLOEXEC//为解决 编译过程中找不到accept4函数问题
#回到qt顶层目录:cd ../../../
动态库编译:
./configure -embedded arm -little-endian -host-little-endian -xplatform qws/linux-arm-g++ -prefix /opt/qt4.8.6 -release -shared -opensource -confirm-license -no-multimedia -no-audio-backend -no-webkit -nomake examples -nomake demos -nomake docs -nomake tools -no-qt3support -no-javascript-jit -no-script -no-scripttools -no-declarative -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -no-openssl -no-nis -no-cups -no-dbus -qt-freetype -no-opengl -depths 15,16,24,32 -qt-gfx-linuxfb -qt-mouse-linuxinput
静态编译
./configure -embedded arm -little-endian -host-little-endian -xplatform qws/linux-arm-g++ -prefix /opt/qt4.8.6 -release -static -opensource -confirm-license -no-multimedia -no-audio-backend -no-webkit -nomake examples -nomake demos -nomake docs -nomake tools -no-qt3support -no-javascript-jit -no-script -no-scripttools -no-declarative -qt-zlib -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -no-openssl -no-nis -no-cups -no-dbus -qt-freetype -no-opengl -depths 15,16,24,32 -qt-gfx-linuxfb -qt-mouse-linuxinput
**解释:-prefix /opt/qt4.8.6 //为安装的路径,根据自己选择而定
-xplatform qws/linux-arm-g++ //交叉编译工具,修改后可以直接使用**
make
make install
//这将会安装到指定的目录下/opt/qt4.8.6方法一:
vi /etc/profile
文件末尾添加:
# Thu Nov 23 08:55:07 CST 2017
# Hisilicon Linux, Cross-Toolchain PATH
export PATH="/opt/qt4.8.6/bin:$PATH"
#
使环境变量生效:
执行source /etc/profile
qmake -v
//查看版本信息
方法二:
最简单的方式创建符号链接,类似于window的快捷方式
ln -s /opt/qt4.8.6/bin/qmake /usr/bin/arm-qmake
注:执行是root用户下,arm-qmake是自己定义的一个快捷方式名
查看下是否链接成功:arm-qmake -v //编译的时候直接用arm-qmake -xxx.pro 即可生成Makefile文件
输出:QMake version 2.01a
Using Qt version 4.8.6 in /opt/qt4.8.6/lib
注:由于板子上只有16M,空间不足以移植这些库,本人采取了外置存储库的方式,配置外置环境变量即可关联了
拷贝过程中,链接文件可能无法复制,可以先把相关库移植过去再做软链接ln -s
#在项目目录下执行:qmake xx.pro //xx.pro工程名
#make
#生成可执行文件如:hi3521a_qt_demo
#file hi3521a_qt_demo //查看是否为arm版的文件
#查看hisi_qt_test使用的动态库:arm-hisiv300-linux-readelf -d hi3521a_qt_demo
#把用到的库/opt/qt4.8.6/lib/* 移植到板子上(我只放到U盘,然后做链接,原理也是一样的)
ln -s /mnt/usb/qt4.8.6/lib/libQtGui.so.4.8.6 /lib/libQtGui.so.4
ln -s /mnt/usb/qt4.8.6/lib/libQtNetwork.so.4.8.6 /lib/libQtNetwork.so.4
ln -s /mnt/usb/qt4.8.6/lib/libQtCore.so.4.8.6 /lib/libQtCore.so.4
ln -s /mnt/usb/qt4.8.6/lib/libstdc++.so.6.0.19 /lib/libstdc++.so.6
ln -s /mnt/usb/qt4.8.6/lib/libgcc_s.so.1 /lib/libgcc_s.so.1
—–>>以上是把U盘下/mnt/usb/qt4.8.6/lib/* 链接到arm板上lib目录下了,有些库不是Qt库(如libstdc++.so.6.0.19、libgcc_s.so.1,在PC端目录/opt/hisi-linux可以搜索到),
再复制到U盘,链接可以自己写下脚本生成。(注意/mnt/usb/qt4.8.6/lib/是自己库的目录)
#在板子上配置环境变量,制定库和字体文件的位置
#vi /etc/profile
#在后面加上
export LD_LIBRARY_PATH=/mnt/usb/qt4.8.6/lib/:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=/mnt/usb/qt4.8.6/lib/fonts/
export QWS_DISPLAY="linuxFb:/dev/fb0"
export QT_QPA_PLATFORM="linuxFB:fb=/dev/fb0:size=1280x720:mmSize=1280x720:offset=0x0"
source /etc/profile
//配置环境生效,这是临时的,重启需要执行
#初始化Hisilicon Framebuffer才能显示Qt界面,下面拿海思自带初始化图层的例子修改;
vi mpp/sample/hifb/sample_hifb.c
在mian()函数修改下让程序自动进入模式SAMPLE_HIFB_Compression();剩下的模式可以屏蔽掉。
在函数SAMPLE_HIFB_COMPRESS(void *pData)里的stCanvasBuf.UpdateRect.h = HEIGHT;下面写getchar();
//在此处暂停,然后去执行QT程序,不让其打开海思例子的图片。
首先把例子后台运行:
./sample_hifb &
//屏幕会变绿色
然后执行qt程序:
./hi3521a_qt_demo -qws