日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

移植QT到tiny4412开发板

發(fā)布時間:2025/3/8 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移植QT到tiny4412开发板 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

        • (一) 環(huán)境準(zhǔn)備
        • (二) Qt源代碼下載
        • (三) 移植tslib庫
        • (四)操作流程
            • 1.解壓qt源碼包
            • 2.配置編譯環(huán)境
            • 3.生成Makefile
            • 4.編譯安裝
            • 5.安裝一些庫用來支持 qt
            • 6. 添加以下內(nèi)容到開發(fā)板目錄下的/etc/profile 文件
            • 7. 添加字體
            • 8.QT中文支持
        • (五)使用QtCreater編寫測試程序
        • (六)使用命令編譯測試
        • (七)關(guān)于交叉編譯器版本的問題:

(一) 環(huán)境準(zhǔn)備

  • ubuntu16.04
  • 交叉編譯工具:arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
  • linux內(nèi)核版本:linux-3.5

一定要注意交叉編譯器版本和qt源代碼版本的問題,否則制作Makefile會出現(xiàn)問題,關(guān)于出現(xiàn)版本問題,在文末有解決辦法提示。
交叉編譯器的版本是arm-linux-gcc 4.5.1 ,該編譯器版本對C++11支持不完善,如果需要編譯更加高的QT版本,就需要升級交叉編譯器,目前4友善之臂光盤提供的編譯器最高只能支持QT5.6版本的交叉編譯。
最新的交叉編譯器下載地址: https://www.veryarm.com/arm-none-linux-gnueabi-gcc
這里我們下載arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2,文中演示使用的也是這個版本 ,安裝交叉編譯器參考:linux安裝交叉編譯環(huán)境

(二) Qt源代碼下載

下載鏈接:Qt

這里根據(jù)自己的需求選擇,我這里選擇5.1版本的


選擇single下載完整的源碼包


選擇.tar.gz結(jié)尾的,我這里有以前下載好的5.7.0的源碼包直接使用了,如果下載其他版本的方法不變。

(三) 移植tslib庫

移植前需要先移植好tslib庫,tslib 是電阻式觸摸屏用于校準(zhǔn)的一個軟件庫,是一個開源的程序,能夠為觸摸屏驅(qū)動獲得的采樣提供諸如濾波、去抖、校準(zhǔn)等功能,通常作為觸摸屏驅(qū)動的適配層,為上層的應(yīng)用提供了一個統(tǒng)一的接口。操作觸摸屏?xí)r,QT需要依賴tslib獲取屏幕坐標(biāo)。
具體的移植過程參考:tiny4412移植tslib庫

(四)操作流程

1.解壓qt源碼包
tar -xvf qt-everywhere-opensource-src-5.1.0.tar.gz cd qt-everywhere-opensource-src-5.1.0

注意這里解壓的時候不要選擇ubuntu自帶的提取到此處,有可能丟失文件,我在這個部分找了好久錯誤

2.配置編譯環(huán)境

由于我用的是新更新的源代碼,所以交叉編譯器安裝的是5.4的,在配置qmake.conf的時候需要注意。

root@1:/qt-everywhere-src-5.1.0# gedit qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf

qmake.conf 文件內(nèi)容如下:

# #qmake configuration for building with arm-linux-gnueabi-g++ #MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublibQT_QPA_DEFAULT_PLATFORM = linux #eglfs QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-ainclude(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g++-unix.conf)#modifications to g++.confQMAKE_CC = arm-none-linux-gnueabi-gcc QMAKE_CXX = arm-none-linux-gnueabi-g++ QMAKE_LINK = arm-none-linux-gnueabi-g++ QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++#modifications to linux.confQMAKE_AR = arm-none-linux-gnueabi-ar cqs QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy QMAKE_NM = arm-none-linux-gnueabi-nm -P QMAKE_STRIP = arm-none-linux-gnueabi-strip load(qt_config)

QT_QPA_DEFAULT_PLATFORM選項是指定圖形插件, Qt5將各平臺底層抽象為一個 qpa 插件,通常在mac上是cocoa, 在window上是windows, 在linux X11下是xcb, 如果有OPENGL支持, 那么選eglfs。而對于無硬件加速的設(shè)備,則選擇linuxfb。

armv7-a :是當(dāng)前CPU的構(gòu)架,需要根據(jù)當(dāng)前的CPU實際構(gòu)架填寫。

3.生成Makefile

創(chuàng)建腳本文件, 生成 Makefile,對 qt 進行裁剪及安裝配置

gedit autoConfigure.sh

內(nèi)容如下:

#!/bin/sh ./configure \ -v \ -prefix /usr/local/Qt5.7.0 \ -release \ -opensource \ -make libs \ -xplatform linux-arm-gnueabi-g++ \ -optimized-qmake \ -pch \ -qt-sql-sqlite \ -qt-libjpeg \ -qt-zlib \ -no-opengl \ -skip qt3d \ -skip qtcanvas3d \ -skip qtpurchasing \ -no-sse2 \ -no-openssl \ -no-nis \ -no-cups \ -no-glib \ -no-iconv \ -nomake examples \ -nomake tools \ -skip qtvirtualkeyboard \ -I/usr/local/tslib/include \ -L/usr/local/tslib/lib exit

以上的配置選項信息可通過./configure –help 查看

修改腳本運行權(quán)限,執(zhí)行腳本,完成后在文件夾下生成 Makefile

chmod +x autoConfigure.sh ./autoConfigure.sh

編譯出現(xiàn)如下錯誤(如果沒錯誤忽略這一點)(1)(2):

查看config.log信息

root@1:/qt-everywhere-src-5.14.2# vim config.log

查看配置的幫助信息:

./configure -help

(1) -std=c++11 沒有

這是交叉編譯器版本較低,安裝高版本的交叉編譯器就行
(2) main.cpp:2:24: fatal error: libspeechd.h: 沒有那個文件或目錄

4.編譯安裝
make -j8 && make install -j8

編譯過程比較慢,需要幾個小時

5.安裝一些庫用來支持 qt
apt-get install libncurses5-dev libreadline-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-glx0-dev libxcb-xinerama0-dev

將/usr/local/ Qt5.7.0 拷貝到開發(fā)板/usr/local/

cp /usr/local/ Qt5.7.0 /driver/rootfs/usr/local/ -r
6. 添加以下內(nèi)容到開發(fā)板目錄下的/etc/profile 文件
export QT_ROOT=/usr/local/Qt5.7.0/ export TSLIB_ROOT=/usr/local/tslib/ export TSLIB_TSDEVICE=/dev/input/event0 export TSLIB_TSEVENTTYPE=input export TSLIB_CALIBFILE=/etc/pointercal export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts export TSLIB_FBDEVICE=/dev/fb0 export TSLIB_CONSOLEDEVICE=none export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib export QWS_MOUSE_PROTO=tslib:/dev/event2 export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0 export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts export QT_QPA_GENERIC_PLUGINS=tslib export QT_QPA_FB_TSLIB=1
7. 添加字體
mkdir /driver/rootfs/usr/local/Qt5.7.0/lib/fonts

將/usr/share/fonts/truetype/ubuntu-font-family 下的字體文件,復(fù)制到根文件系統(tǒng)/usr/local/ Qt5.7.0/lib/fonts
目錄下

cp /usr/share/fonts/truetype/ubuntu-font-family/* /driver/rootfs/usr/local/Qt5.7.0/lib/fonts –r
8.QT中文支持

Qt的字體目錄是根據(jù)自己在PC機的QT源碼編譯安裝目錄有關(guān)。

如果想讓QT顯示中文,可以將windows下的中文字體拷貝到QT的字體庫目錄下。

這是我的Qt安裝目錄:
windows下字體目錄在:C:\Windows\Fonts

將上面的字體拷貝到Qt安裝目錄下的fonts下就行了。

(五)使用QtCreater編寫測試程序

打開QtCreater,這里我已經(jīng)安裝好了,沒安裝的可以在上面提供的網(wǎng)址下載。




同時,想要將編譯后的文件在開發(fā)板環(huán)境下運行需要添加
exportLD_PRELOAD=$TSLIB_ROOT/lib/libts.so 到根文件的/etc/profile,否則運行時會出現(xiàn)
Couldnt load module pthres
ts_config() failed (No such file or directory)

除了使用QtCreater編譯程序,我們還可以使用qmake命令編譯

(六)使用命令編譯測試

1.創(chuàng)建qt工程

root@1:/mydriver/rootfs/home/qt/led1# ls led.pro main.cpp mainwindow.h socket.cpp led.pro.user mainwindow.cpp mainwindow.ui socket.h

2.使用qmake命令構(gòu)建Makefile

root@1:/mydriver/rootfs/home/qt/led1# qmake Info: creating stash file /mydriver/rootfs/home/qt/led1/.qmake.stash root@1:/mydriver/rootfs/home/qt/led1# ls led.pro mainwindow.cpp Makefile led.pro.user mainwindow.h socket.cpp main.cpp mainwindow.ui socket.h

3.編譯程序

root@1:/mydriver/rootfs/home/qt/led1# make root@1:/mydriver/rootfs/home/qt/led1# ls led led.pro.user main.o mainwindow.h mainwindow.ui moc_mainwindow.cpp moc_predefs.h socket.h ui_mainwindow.h led.pro main.cpp mainwindow.cpp mainwindow.o Makefile moc_mainwindow.o socket.cpp socket.o

上面生成的led就是可執(zhí)行文件,可以直接復(fù)制到開發(fā)板運行

./led

(七)關(guān)于交叉編譯器版本的問題:

最近更新的qt源碼要求c++11,沒有./configure -no-c++11選項,因為arm-linux-gcc4.8以后才支持c++11
,所以可以下載以前的qt源碼+低版本的交叉編譯器(arm-linux-gg-4.8以前)或者下載最近的qt源碼+高版本的交叉編譯器(arm-linux-gg-4.8以后)
如果下載的是以前的qt可以使用上面提供的arm-linux-gcc-4.5,在制作makefile的時候使用:

#./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix $PWD/tmp -no-c++11 -no-opengl -no-dbus

如果下載的是最近的qt可以使用上面提供的arm-linux-gnueabihf-gcc-5.4:

#./configure -release -opensource -xplatform linux-arm-gnueabi-g++ -prefix $PWD/tmp -std=c++11 -no-opengl -no-dbus

qt5.1.0(2013年發(fā)布)版本:


qt5.14.2(2017年維護的):

總結(jié)

以上是生活随笔為你收集整理的移植QT到tiny4412开发板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。