目录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
暂停输入的进程