## 移植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等級設置