序:opencv部署到开发板,由于GTK问题导致opencv无法使用Gui,只能交叉编译QT,并为其作为gui供opencv使用
一、PC端交叉编译QT5.12.12
先编译tslib文件
tslib文件的下载链接:https://github.com/libts/tslib/releases
配置交叉编译器:根据上一节配置,用上一节的编译器,参照上一节。下载tslib文件后解压到ubuntu文件夹下。
交叉编译
安装环境:
sudo apt-get install automake
sudo apt-get install autogen
sudo apt-get install libtool
进入解压后的文件夹下终端执行:sudo ./autogen.sh
然后终端运行下面命令:
./configure --host=aarch64-none-linux-gnu ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/home/wangzhen/linux/tslib-1.22/arm-tslib
其中--host=该软件将运行的平台,--prefix交叉编译完生成库的位置
可能会出现下面的错误:
可以查看日志
故进行下列操作:
再次执行:
./configure --host=aarch64-none-linux-gnu ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/home/wangzhen/linux/tslib-1.22/arm-tslib
然后make && make install可看到生成了arm-tslib库了。
切换到arm-tslib/bin目录下,查看一下编译出来的文件是否是ARM64的
把tslib移植到开发板
将虚拟机上的arm-tslib库打包成arm-tslib.tar文件,拷贝到目标板/opt/目录中,我的目录是放在/opt/arm-tslib中
添加环境变量,终端执行sudo vim /etc/profile,修改里面的文件
我自己用的是下面这张图片上的设置
执行source /etc/profile或者重启使环境变量生效。
验证触摸屏,上面TSLIB_TSDEVICE=/dev/input/event1为指定触摸屏设备
执行cat /dev/input/event1或者cat /dev/input/event1正常的话,触摸屏乱码
然后执行触摸屏校准:./opt/arm-tslib/bin/ts_calibrate
此时执行触摸屏校准,依次点击后会生成/etc/pointercal,该文件目录不要修改。
QT5.12.12的交叉编译
下载后文件为qt-everywhere-src-5.12.12.tar.xz
xz -d qt-everywhere-src-5.12.12.tar.xz解压为tar后缀的
tar -xvf qt-everywhere-src-5.12.12.tar
cd qt-everywhere-src-5.12.12
cd 到qtbase/mkspaces目录,找到一个相似的工具链,cp一份并修改为指定的工具链。(即在QT下添加自己的指定的平台)
cd qtbase/mkspecs # cd到该目录
cp linux-arm-gnueabi-g++/ linux-arm-rk3588-linux-g++ -r # 拷贝一份linux-arm-gnueabi-g++
cd linux-arm-rk3588-linux-g++ # 切换到新复制的目录并修改
切换到新建的目录下:
修改qmake.conf的内容为:
即指定的交叉编译链。
在源码目录下编译一个脚本autoconfig.sh
给autoconfig.sh添加可执行权限:chmod +x autoconfig.sh,然后执行./autoconfig.sh,然后make -j8 && make install 。等待编译安装,编译安装时间大概在2-3小时。
移植QT5.12.12到arm板子上运行qt程序
把上面编译好的文件夹build文件夹打包为qt-5.12.12-aarch64.tar.gz文件。拷贝到开发板/opt/arm-qt目录下。
在开发板终端运行vim /etc/profile在最后面添加环境变量。
要想QT程序显示中文,需要把中文字库放到新建一个/usr/share/fonts/目录下,配置QT5的环境变量,打开文件系统/etc/profile,添加如下内容。
至此开发板的qt环境搭建已经完成了。
测试qt环境是否能正常运行,在下一章节介绍。
qt交叉编译后的程序部署到ARM开发板可能会报段错误,加上sudo执行程序,就可以解决了,至于什么原因我也不知道。