目錄php
@(S5P6818移植Qt5.五、FFTW、QWT)html
撰寫日期 | 2019.09.25 |
---|---|
完稿日期 | 2019.09.28 |
最近維護 | 暫無 |
本文做者 | multimicro |
聯繫方式 | multimicro@qq.com |
資料連接 | 本文無附件資料 |
GitHub | https://github.com/wifialan/ |
原文連接 | https://blog.csdn.net/multimicro/article/details/101369585 |
環境說明 | 詳細信息 | 備註信息 |
---|---|---|
操做系統 | Ubunut 16.04 | |
開發板 | NanoPC-T3 - S5P6818 - Cortex A53 | NanoPC-T3 |
開發板系統 | debian 32位(由友善之臂提供) | |
Qt版本 | qt-everywhere-opensource-src-5.5.1 | 官網地址 |
FFTW版本 | fftw-3.3.8 | 官網地址 | 下載地址 |
QWT | qwt-6.1.4 | 下載地址 |
編譯器版本 | gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf | 官網地址 |
編譯器路徑 | /opt/toolschain/linaro/bin/arm-linux-gnueabihf- | 絕對路徑 |
移植Qt,本文分爲三步:linux
3 將編譯安裝後的文件拷貝到目標板,添加相應的環境變量c++
cd qt-everywhere-opensource-src-5.5.1
在該文件夾下建立配置腳本文件 qtbuile.sh
文件內容以下git
#!/bin/sh ./configure -prefix /home/china/work/s5p6818/qt/Qt5.5 \ -verbose \ -opensource \ -release \ -confirm-license \ -xplatform linux-arm-gnueabi-g++ \ -optimized-qmake \ -shared \ -no-opengl \ -no-openssl \ -no-sse2 \ -no-cups \ -no-glib \ -no-xcb
對此配置文件有疑問的能夠在該文件夾下執行./configure --help
查看配置的詳情解釋
這裏提示三點:github
-prefix
後面跟的是編譯好的qt文件安裝目錄xplatform
指的是target端的版本platform
是PC端的-platform target ... The operating system and compiler you are building on (default detected from host system). -xplatform target ... The target platform when cross-compiling.
qmake.conf
所在目錄爲qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
此qmake.conf
所在目錄應和qtbuild.sh
腳本里的xplatform
指定目錄一致
修改內容以下,主要是指定修改編譯器shell
# # qmake configuration for building with arm-linux-gnueabi-g++ # MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib QT_QPA_DEFAULT_PLATFORM = linuxfb #Compiler Flags to take advantage of the ARM architecture #Run the linux terminal command "arch" to see the detail your target cpu arch information. #QMAKE_CFLAGS_RELEASE += -O3 -march=armv7l #QMAKE_CXXFLAGS_RELEASE += -O3 -march=armv7l include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g++-unix.conf) # modifications to g++.conf QMAKE_CC = /opt/toolschain/linaro/bin/arm-linux-gnueabihf-gcc QMAKE_CXX = /opt/toolschain/linaro/bin/arm-linux-gnueabihf-g++ QMAKE_LINK = /opt/toolschain/linaro/bin/arm-linux-gnueabihf-g++ QMAKE_LINK_SHLIB = /opt/toolschain/linaro/bin/arm-linux-gnueabihf-g++ # modifications to linux.conf QMAKE_AR = /opt/toolschain/linaro/bin/arm-linux-gnueabihf-ar cqs QMAKE_OBJCOPY = /opt/toolschain/linaro/bin/arm-linux-gnueabihf-objcopy QMAKE_NM = /opt/toolschain/linaro/bin/arm-linux-gnueabihf-nm -P QMAKE_STRIP = /opt/toolschain/linaro/bin/arm-linux-gnueabihf-strip load(qt_config)
修改後執行編程
./qtbuild.sh
沒有錯誤的輸出是這樣的,如有錯誤,請經過查看error信息,更改。
而後canvas
make -j8 make install
最後的安裝文件以下
vim
由於lib
文件夾中有不少軟連接,不可直接使用scp
命令將其拷貝到開發板上,應將其壓縮爲一個包,而後使用scp
或者u盤傳到開發板,解壓使用
壓縮命令:
tar -czvf qt5.5.tar.gz Qt5.5
解壓命令:
tar -zxvf qt5.5.tar.gz
開發板上效果
vim /etc/profile
export QT_ROOT=/opt/qt5.5 export LD_LIBRARY_PATH=/usr/lib:$QT_ROOT/lib export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts export QT_PLUGIN_PATH=$QT_ROOT/plugins
source /etc/profile
windows下的編譯方式參考QWT編譯與配置-Windows/Linux環境
下載源碼後解壓,而後進入qwt文件夾
qmake
/opt/Qt5.12.1/5.12.1/gcc_64/bin/qmake qwt.pro
make -j8
若出現錯誤,請跟據錯誤狀況禁用qwtconfig.pri文件中的相關組件
sudo make install
/usr/local/qwt-6.1.4
sudo cp /usr/local/qwt-6.1.4/plugins/designer/libqwt_designer_plugin.so /opt/Qt5.12.1/Tools/QtCreator/lib/Qt/plugins/designer
跟據Carlos Wei所列,qt中沒有出現qwt控件,不知道爲什麼,但我這個配置是能夠的
sudo cp -r /usr/local/qwt-6.1.4/lib/* /opt/Qt5.12.1/5.12.1/gcc_64/lib/
加-r
是由於要複製軟連接文件
/Qt5.12.1/5.12.1/gcc_64/include
創建Qwt文件夾mkdir Qwt
sudo cp /usr/local/qwt-6.1.4/include/* /opt/Qt5.12.1/5.12.1/gcc_64/include/Qwt
配置成功後以下:
Qt中調用方式以下圖所示,看LINUX下的能夠
頭文件包含是節選,選擇性調用便可。
gedit qwtconfig.pri
修改前:
unix { QWT_INSTALL_PREFIX = /usr/local/qwt-$$QWT_VERSION # QWT_INSTALL_PREFIX = /usr/local/qwt-$$QWT_VERSION-qt-$$QT_VERSION }
修改後:
unix { QWT_INSTALL_PREFIX = /home/china/work/s5p6818/module/qwt_install/qwt-$$QWT_VERSION # QWT_INSTALL_PREFIX = /usr/local/qwt-$$QWT_VERSION-qt-$$QT_VERSION }
qmake
,也就是編譯arm端qt的qmake進行構建/home/china/work/s5p6818/qt/Qt5.5/bin/qmake qwt.pro
make -j8
若出現錯誤,請跟據錯誤狀況禁用qwtconfig.pri文件中的相關組件
如:
cd src/ && ( test -e Makefile || /home/china/work/s5p6818/qt/Qt5.5/bin/qmake /home/china/work/s5p6818/module/qwt-6.1.4/src/src.pro -o Makefile ) && make -f Makefile
Project ERROR: Unknown module(s) in QT: opengl
Makefile:45: recipe for target 'sub-src-make_first-ordered' failed
make: *** [sub-src-make_first-ordered] Error 3
則修改qwtconfig.pri文件中此處位置:
######################################################################
# If you want to use a OpenGL plot canvas
######################################################################
#QWT_CONFIG += QwtOpenGL
make install
5.編譯好的qwt文件在:/home/china/work/s5p6818/module/qwt_install/
拷貝lib
目錄下文件到ARM板下面的qt中lib
文件夾中
tips:由於有軟連接,能夠先把這些打包壓縮,而後傳輸到板子上,解壓便可,能夠保證軟接不被破壞
windows下參考Qt上FFTW組件的編譯安裝
進入fftw文件夾目錄
./configure --prefix=/usr/local/fftw --enable-float --disable-fortran --enable-shared=yes
make -j8
sudo make install
./configure --prefix=/home/china/work/s5p6818/module/fftw_install --host=arm-linux --enable-float --disable-fortran --enable-shared=yes CC=/opt/toolschain/linaro/bin/arm-linux-gnueabihf-gcc
Tips:
--prefix=/home/china/work/s5p6818/module/fftw_install
指定安裝文件所在位置
--host=arm-linux
指定目標處理器爲arm
CC=/opt/toolschain/linaro/bin/arm-linux-gnueabihf-gcc
指定交叉編譯器
make -j8
make install
在qt工程的.pro文件中添加(僅看關於FFTW的):
PC端的路徑和ARM端路徑不一樣,這裏爲了區分而已
#LINUX_QWT_DIR=/usr/local/qwt-6.1.4 //(PC端) #LINUX_FFTW_DIR=/usr/local/fftw LINUX_QWT_DIR=/home/china/work/s5p6818/module/qwt_install/qwt-6.1.4 //(ARM端) LINUX_FFTW_DIR=/home/china/work/s5p6818/module/fftw_install WIN_QWT_DIR=C:\opt\qwt\qwt-6.1.4 WIN_FFTW_DIR=C:\opt\fftw # add file: qwt.dll file: libfftw3f-3.dll to *.exe path unix { INCLUDEPATH += $${LINUX_QWT_DIR}/include INCLUDEPATH += $${LINUX_FFTW_DIR}/include LIBS += -L"$${LINUX_QWT_DIR}/lib/" -lqwt LIBS += $${LINUX_FFTW_DIR}/lib/libfftw3f.a } win32 { INCLUDEPATH += $${WIN_QWT_DIR}\include INCLUDEPATH += $${WIN_FFTW_DIR} LIBS += -L"$${WIN_QWT_DIR}\lib" -lqwt LIBS += "$${WIN_FFTW_DIR}\libfftw3f-3.dll" }
桌面端Qt的配置參考JZ2440(V3)移植QT5.6--圖文教程
而後將編譯後的可執行文件傳到arm開發板上執行測試,經過file
命令可查看可執行文件信息
確保環境變量加載到當前shell裏面後,經過一下命令能夠看到程序的在ARM開發板上的運行狀況
sudo ./NetworkPlot
字體暫時沒有移植,固軟件上面的按鈕上沒有顯示,能夠看出,在嵌入式ARM板子上,能夠完美運行
libstdc++.so.6: version `CXXABI_1.3.9' not found
libstdc++.so.6
所指向的實體文件libstdc++.so.6
創建軟連接,具體參考 此篇文章執行嵌入式qt程序後,中止嵌入式系統的可視化顯示
lightdm
ps aux | grep lightdm
選擇/usr/bin/X :0 -seat seat0 -auth /var/run/lightdm/root/:0
這條進程的進程號491
,而後
暫停進程
kill -STOP 491
繼續進程
kill -CONT 491
能夠在shell裏面,用一句命令實現
ps -ef | grep "/usr/bin/X :0 -seat seat0 -auth /var/run/lightdm/root/:0" | grep -v grep | awk '{print $2}' | xargs kill -STOP -9
也能夠用腳本實現
#! /bin/sh ID=`ps -ef | grep '/usr/bin/X :0 -seat seat0 -auth /var/run/lightdm/root/:0' | grep -v 'grep' | awk '{print $2}'` for pid in $ID do kill -STOP -9 $pid echo " kill multimirco pid:$pid" done
Tips:
ps -ef :
查看進程
grep ‘multimirco’
列出進程multimirco的信息
grep -v 'grep'
忽略包含grep的進程
awk '{print $2}'
輸出第二列的數據
xargs kill -STOP -9
暫停輸入的進程