交叉编译QT+OPENCV,树莓派3B,ubuntu18.04

因为树莓派编译比较慢,然后就再PC上进行编译,然后使用PC进行编译,树莓派仅运行。

QT的编译主要参考了https://blog.csdn.net/lixiaoxin1989/article/details/90030624的博客。

还有个官网教程 https://wiki.qt.io/RaspberryPi2EGLFS#Step_by_step也可以看看,比博客详细点。

写入树莓派,刷卡+写img。我的是2021-05-07-raspios-buster-armhf-full.img。

树莓派安装后先进行了换源,坑(换源要看版本的,stretch,buster)

换源之后我执行了 ,这里看情况吧,那个upgrade看情况吧,挺费时的。

sudo apt-get update
sudo apt-get upgrade

还装了个汉语包。

sudo apt-get install ttf-wqy-zenhei

并且开启了我的SSH,我是通过可视化界面配置的。

sudo apt-get build-dep qt4-x11
sudo apt-get build-dep libqt5gui5
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 libfontconfig1-dev libdbus-1-dev libfreetype6-dev libicu-dev libinput-dev libxkbcommon-dev libsqlite3-dev libssl-dev libpng-dev libjpeg-dev libglib2.0-dev libraspberrypi-dev libpq-dev libmariadbclient-dev bluez libbluetooth-dev build-essential

接下来我就按照博客的安装了这几个库,然后在安装libqt5gui5时,有提示我error,然后我就执行了适应安装。

就是使用

sudo apt-get install aptitude
sudo aptitude install libqt5gui5

接下来乖乖执行

sudo mkdir /usr/local/Qt5.12.4
sudo chown pi:pi /usr/local/Qt5.12.4
sudo chmod -R 777 /opt
sudo apt-get install gdbserver

关于那个Qt5.12.4,可以改哦。但是要记住。

然后是分辨率设置,不设置的话,后面编译会报错的。我之前偷懒没搞。我记得会导致我运行的QT程序占满我的树莓派屏幕。总之很不爽。还是设置一下。

#这里随便用什么打开都行。
sudo leafpad ~/.profile 

#在这个文件最后添加
export QT_QPA_EGLFS_PHYSICAL_WIDTH=1920
export QT_QPA_EGLFS_PHYSICAL_HEIGHT=1080

#最后执行
source .profile

接下来转PC上。我的版本。ubuntu-18.04.5-desktop-amd64.iso

我用的是虚拟机。然后因为要编译源码。建议硬盘稍微大一点。当然我80G过分了。

交叉编译QT+OPENCV,树莓派3B,ubuntu18.04

 然后https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/

在这个网站上下载这三个压缩包,坑(我也是第一次接触交叉编译,我先下了2019的包发现是个64位的,其实文件名写了不是吗。别下这个包runtime-gcc-linaro-7.5.0-2019.12-aarch64-linux)

交叉编译QT+OPENCV,树莓派3B,ubuntu18.04

三个包解压后,把压缩包里面的内容放在raspi里面的cross-compile-tool里面。

交叉编译QT+OPENCV,树莓派3B,ubuntu18.04

 然后乖乖执行两个安装。

sudo apt-get install build-essential
sudo apt install lib32ncurses5 lib32z1

接下来要准备拷贝PI的内容啦,IP地址是树莓派的局域网地址
mkdir sysroot sysroot/usr sysroot/opt

rsync -avz pi@192.168.0.10:/lib sysroot
rsync -avz pi@192.168.0.10:/usr/include sysroot/usr
rsync -avz pi@192.168.0.10:/usr/lib sysroot/usr
rsync -avz pi@192.168.0.10:/opt/vc sysroot/opt

这里我是拷贝第三个lib时耗时比较多,其它还好

然后乖乖执行,看清楚目录哦

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot

 接下来,下载QT代码咯(确实可以早点下载,无所谓)。

wget http://download.qt.io/official_releases/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz
tar xvf  qt-everywhere-src-5.12.4.tar.xz

然后修改一个文件的笔误:./qtbase/mkspecs/devices/linux-rasp-pi3-g++/qmake.conf

VC_LIBRARY_PATH         = $$[QT_SYSROOT]/opt/vc/lib
VC_INCLUDE_PATH         = $$[QT_SYSROOT]/opt/vc/include
 
VC_LINK_LINE            = -L$${VC_LIBRARY_PATH}
 
QMAKE_LIBDIR_OPENGL_ES2 = $${VC_LIBRARY_PATH}

一共四处。然后这里我没有按照教程去对-lEGL和-LGLESv2进行修改。(我只是记录我成功的操作,并没有明白为什么要改)

接下来,如果没问题了。配置QT,(这里有好几个目录路径,需要仔细看看。文件的结构目录也建议和我的一样,因为我之前放在别的文件夹下,make的时候出现了错误,emmm,那个错误没有搜到原因,是一个关于宏定义的。)

./configure -release -opengl es2 -device linux-rasp-pi3-g++ -device-option CROSS_COMPILE=~/raspi/cross-compile-tool/bin/arm-linux-gnueabihf- -sysroot ~/raspi/sysroot -opensource -confirm-license -skip qtwayland -skip qtlocation -skip qtscript -make libs -prefix /usr/local/Qt5.12.4 -extprefix ~/raspi/Qt5.12.4 -hostprefix ~/raspi/Qt5.12.4-host -no-use-gold-linker -v -no-gbm

#我好像40分钟左右make
make
sudo make install

如果make install成功了。那恭喜你了,基本上完成了。

接下来,把QT放到pi上去。

rsync -avz Qt5.12.4 pi@192.168.0.10:/usr/local

齐活儿。后面的没啥难度。

后面的话,

sudo apt-get install qt-creator

然后配置QTkits

Device type: Generic Linux Device
Device: Raspberry Pi (defaut for Generic Linux)  就是去选择你的Raspi
Sysroot: ~/raspi/sysroot   这里就是拷贝了树莓派库的地方
Compiler C: GCC (Raspberry Pi) 这是下载的交叉编译器GCC
Compiler C++: GCC (Raspberry Pi) 这是下载的交叉编译器G++
Debugger: GDB (Raspberry Pi) 这是下载的交叉编译器GDB
Qt version: Qt 5.12.4 (Raspberry Pi) 这里选择QT5.12.4-host/bin/qmake

然后用一个VNC观察自己的程序 https://www.realvnc.com/en/connect/download/viewer/linux/

在Qt Creator的Project - Run - Run - Command line argumens中增加-platform vnc,然后用VNC Viewer连接即可。注意要先在Qt Creator中启动调试,再用VNC Viewer连接。

交叉编译QT+OPENCV,树莓派3B,ubuntu18.04

 killall (项目名称) || true

-platform vnc

最后搞一下字体。不搞的话会导致程序的文字显示不出来。

复制中文字体库:将/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc 复制到 /usr/local/qt5pi/lib/fonts。

复制英文字体库:将/usr/share/fonts/truetype/dejavu 中的文件复制到 /usr/local/qt5pi/lib/fonts

以上是

交叉编译直接按照https://blog.csdn.net/tajon1226/article/details/100606316的教程。

sudo apt-get install cmake 

sudo cmake-gui

首先准备源码,然后源码解压缩后在里面创建了一个release目录。

然后

交叉编译QT+OPENCV,树莓派3B,ubuntu18.04

没有找到笔者所说的MAKE_BUILD_TYPE,和MAKE_INSTALL_PREFIX,可能与版本有关。

交叉编译QT+OPENCV,树莓派3B,ubuntu18.04

只告诉我会安装到这。 

然后Configure并且Generate。

接着到release目录下。打开CmakeCache.txt,进行修改。

找到CMAKE_EXE_LINKER_FLAGS:STRING=  ,  加上-pthread -ldl -lrt

CMAKE_EXE_LINKER_FLAGS:STRING=-pthread -ldl -lrt

然后reload_cache.

重新Configure和Generate。

然后去release目录下,make ,sodo make install。

安装后,发现多了这些库,拷贝到树莓派的usr/lib中。

交叉编译QT+OPENCV,树莓派3B,ubuntu18.04

 接下来,愉快的写代码吧。配环境好烦啊。

 

上一篇:windows10 安装 composer


下一篇:安装 Vmware和创建虚拟机即密码破解