## 移植QT 4.8.7
之前移植了QT5.9.1,这里移植QT4.8.7就简单介绍下
下载
``
## 下载QT4.8.7
~~~
wget http://download.qt.io/official_releases/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.tar.gz
tar xf qt-everywhere-opensource-src-4.8.7.tar.gz
cd qt-everywhere-opensource-src-4.8.7
./configure --help >help.txt #QT的配置较为复杂,进来先看看帮助文档,在本节最后附录里有翻译
~~~
一般来说,我们需要编译主机和目标板两个版本的qt:
主机版可以用于前期的gui的设计调试;目标板用于实际产品的验证。
## 编译X11版本
主机版一般是X11,配置如下:
cfg_X11.sh
~~~
#!/bin/bash
./configure -prefix /opt/qt-4.8.7-x11 -opensource -make tools
#安装位置,开源版本,编译qt工具(makeqpf,qtconfig)
make -j32 #约10分钟
sudo make install
~~~
安装完成后在/opt/qt-4.8.7-x11下可见安装的文件。
## 交叉编译arm版本
注意,在第二次编译前,先make clean下。如果编译时候仍有错误,可以重新解压编译。
交叉编译,需要配置 xplatform选项,比如要在arm-linux平台上移植Qt的话,就在配置项中加上 -xplatform linux-arm-gnueabi-g++ ,这个是平台名字,Qt5支持的交叉平台都可在源码顶层目录中的 mkspecs/ 下找到。
首先我们需要编辑**mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf**:
加上:(注意,和tslib类似,这里要加上其它什么支持的话,也是交叉编译的库的路径)
~~~
QT_QPA_DEFAULT_PLATFORM = linuxfb
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a -lts
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a -lts
QMAKE_INCDIR += /opt/tslib/include /opt/sqlite3/include
QMAKE_LIBDIR += /opt/tslib/lib /opt/sqlite3/lib
~~~
把arm-linux-gnueabihf-gcc改成arm-linux-gnueabi-gcc等。
然后再编辑配置脚本cfg_arm.sh
~~~
#/bin/sh
./configure -verbose \
-opensource \
-confirm-license \
-release -shared \
-embedded arm \
-xplatform qws/linux-arm-gnueabi-g++ \
-depths 4,8,16,32 \
-fast \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-qt-libpng \
-qt-freetype \
-little-endian -host-little-endian \
-no-qt3support \
-no-libtiff -no-libmng \
-no-opengl \
-no-mmx -no-sse -no-sse2 \
-no-3dnow \
-no-openssl \
-no-webkit \
-no-qvfb \
-no-phonon \
-no-nis \
-no-opengl \
-no-cups \
-no-glib \
-qt-gfx-transformed \
-no-xcursor -no-xfixes -no-xrandr -no-xrender \
-no-separate-debug-info \
-nomake examples -make tools -make docs \
-qt-mouse-tslib -I/opt/tslib/include -L/opt/tslib/lib
~~~
~~~
make -j32
sudo make install
~~~
完成后,相关文件在/opt/qt4.8.7-arm下。
## 常见编译错误
配置QT的时候,如果指定了-webkit,编译的时候会报错:
../3rdparty\javascriptcore\JavaScriptCore/wtf/TypeTraits.h:173:69:error: 'std::tr1' has not been declared
解决方法:修改QT源码目录下mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf文件,加上一行:QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -std=gnu++98
* * * * *
/opt/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: warning: libts.so.0, needed by /home/wcz/qt-everywhere-opensource-src-4.8.7_arm/lib/libQtGui.so, not found (try using -rpath or -rpath-link)
提示没有tslib的库,当然了,提示中也清楚的说了(try using -rpath or -rpath-link)。
我们可以:
1,进入到编译报错的目录,在这里是“examples/network/broadcastreceiver“
2,修改这个目录中的Makefile文件,找到LFLAGS一行,在最后面加上”-Wl,-rpath,/opt/tslib/lib“,也就是手动指定tslib的目录。(这里还没清楚为何configure时的参数没起作用)
3,就地make
4,退回到主目录
5,继续make
上面的操作,如果每个Makefile都要编辑一遍的话,那就太麻烦了,我们偷偷懒。
针对Makefile的LFLAGS一行的特点,我们使用find、grep、awk、sed、xargs来完成这个操作,如下:
进入到出错目录的顶层,如上示例,我们进入到examples。
cd examples
`find . -name Makefile | xargs grep rpath-link | grep -v tslib | awk -F: '{fname[NR]=$1} END {for (i=1;i<=NR;i++){print fname[i]}}' | xargs sed -i 's/LFLAGS.*/& -Wl,-rpath,\/opt\/tslib\/lib/'`
<注意,这个命令会直接修改目录中最底层的每一个Makefile,请试验成功后再使用。>
* * * * *
## 向开发板添加Qt库
首先将/opt/qt5.9.1-arm和/opt/tslib 复制到开发板的对应目录下
然后设置开发板 Qt 环境变量,vi /etc/bash.bashrc
添加下面内容:
~~~
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=/opt/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_LIBRARY_PATH=/lib:/usr/lib:/opt/tslib/lib:/opt/qt5.9.1-arm/lib
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/opt/tslib/bin
export QT_QPA_PLATFORM_PLUGIN_PATH=/opt/qt5.9.1-arm/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=/opt/qt5.9.1-arm/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib:$TSLIB_TSDEVICE
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/optslib/lib:/opt/qt5.9.1-arm/lib:/usr/lib/arm-linux-gnueabihf/lib
~~~
保存后生效上述内容:source /etc/bash.bashrc
br生成的文件系统则为:
~~~
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event1
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export LD_LIBRARY_PATH=/lib:/usr/lib
export PATH=/bin:/sbin:/usr/bin/:/usr/sbin
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=/usr/lib/qt/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib:$TSLIB_TSDEVICE
export QWS_MOUSE_PROTO=Tslib:/dev/input/event1
~~~
# 参考资料
http://blog.csdn.net/armfpga123/article/details/52921558
http://blog.chinaunix.net/uid-29962009-id-5012060.html
- 前言
- 荔枝派TODO任务领取
- linux使用小贴士
- 入门篇
- 板卡介绍
- 开箱指南
- 烧录启动系统
- 联网方法
- 镜像使用
- 镜像说明
- buildroot系统使用
- debian系统使用
- 外设操作
- 外设操作概览
- 低速外设
- GPIO
- GPIO模拟低速接口
- UART
- PWM
- I2C
- SPI
- 高速接口
- SDIO
- USB
- EtherNet
- DVP CSI
- MIPI CSI
- 模拟外设
- CODEC
- LRADC
- 常见设备驱动
- USB摄像头
- USB 3G/4G 网卡
- 舵机
- 开发篇
- UBOOT适配
- UBOOT编译
- UBOOT配置
- UBOOT配置屏幕分辨率
- UBOOT配置SPI启动
- Linux内核开发
- Linux内核编译
- BSP Linux内核编译.md
- Linux内核选项
- 外设驱动与设备树
- RTL8723BS驱动
- 根文件系统定制
- buildroot定制系统
- buildroot添加软件包
- openwrt定制系统
- emdebian定制系统
- camdriod开发
- camdriod编译
- 主线Uboot引导Camdriod
- 系统镜像打包
- XBOOT适配
- 荔枝运行XBOOT
- 应用篇
- 游戏机-基于EmulationStation
- 游戏机-gnuboy
- 语音识别-科大讯飞云
- GUI-QT5
- 语音识别-离线关键词识别
- 路由器-Lichee Zero
- 投稿文章
- 荔枝派Zero开箱指南
- Zero i2c oled使用指南
- zero SPI LCD使用指南
- Zero u-boot编译和使用指南
- TF WiFi使用方法
- Zero Ethernet使用指南
- Zero 移植Qt5.4.1
- ZeroSpiNorFlash启动系统制作指南
- Visio-uboot-sunxi流程
- lichee 编译踩坑记录(ilichee ZERO)
- lichee_zero_外设GPIO接口
- TF WIFI 小白编
- 从零开始LicheePi Zero的开发
- 认识Zero的硬件
- 搭建Zero的开发环境
- 主线Uboot
- 主线kernel
- BSP kernel
- BSP内核启动
- bsp内核的摄像头使用
- BSP内核中的保留内存
- uboot启动BSP内核常见错误
- BSP内核 FBTFT移植
- BSP内核启动错误及警告解决
- buildroot 根文件系统
- emdebian 根文件系统
- SPI Flash 系统编译
- sunxi-fel增加对16M 以上flash的支持
- overlayfs的使用
- jffs2系统挂载不上的常见原因
- JFFS2 文件系统简介
- uboot对spi flash的识别
- bsp内核的SPI flash启动
- Docker开发环境
- Docker 命令速查
- 基础ubuntu系统配置
- docker离线镜像
- Zero系统烧录
- dd镜像烧录
- 分区镜像烧录
- SPI Flash系统烧录
- 一键镜像烧录
- Zero外设把玩
- I2C操作
- PWM输出
- CODEC的使用
- 以太网使用指南
- GPIO操作
- 文件IO方式
- C语言接口(mmap)
- Python操作GPIO
- pinctrl-sunxi介绍
- UART操作
- 点屏
- 点屏之RGB屏
- 点屏之SPI屏 ili9341
- 点屏之SPI OLED
- 点屏之I2C OLED
- 点屏之SPI屏 ili9488
- 点屏之MCU屏
- 点屏之触摸屏驱动
- 点屏之simple-framebuffer
- 点屏之屏幕时序
- 时钟控制器CCM
- 摄像头
- BSP DVP摄像头
- BSP MIPI 摄像头
- 主线DVP摄像头
- 主线 MIPI摄像头
- SPI 操作
- 应用层开发
- 开机自启动
- Segment Fault调试
- Zero通过OTG共享PC网络
- USB摄像头使用
- 基于QT的GUI开发
- 移植tslib
- 移植QT5.9.1
- 移植QT4.8.7
- QtCreator使用
- Qt5.x移植到Qt4.8
- Qt字体相关
- Qt移植总结
- Qt裁剪
- Qt去除鼠标指针显示
- zero_imager使用
- 驱动开发
- 设备树简介
- GPU/DRM 显示驱动
- sys下设备树查看
- atmel触摸屏驱动分析
- atmel触摸屏中断改轮询
- uboot下gpio操作
- helloworld驱动编译演示
- FBTFT分析
- 内核模块静态加载的顺序
- SPI驱动分析
- SPI 驱动编写
- Uboot开发
- 开机logo
- 看门狗的使用
- 关于系统reboot
- 内核printk等级设置