• ubuntu 环境 cross compile 交叉编译 ARM Qt 集成 opencv


    Qt 的版本众多,交叉编译Qt可以下载 最新的 Qt 5.11,在 qtbase/mkspecs/devices/ 下找到你对应开发板的配置文件,

    拷贝出来, 选择一版适用当前交叉编译工具链的版本,这里以  5.8.0版本的Qt 作为demo。

    下载源码,qt-everywhere-opensource-src-5.8.0    下载地址    http://download.qt.io/archive/qt/

    解压后 ,找到Qt 5.11.1中跟目标开发板最匹配的配置文件 ,我的是 qt-everywhere-opensource-src-5.8.0/qtbase/mkspecs/devices/linux-rcar-m3-g++   拷贝整个linux-rcar-m3-g++目录 

    到  Qt 5.8.0 对应的 devices/目录下,

    source XXXXX交叉工具编译链

    写一个 配置脚本build.sh  chmod 修改执行权限 。

    #!/bin/bash
    export ROOTFS=/apt/poky/2.1.2/sysroots/aarch64-poky-linux

    ./configure
    -opensource
    -confirm-license
    -v
    -skip qt3d
    -skip webchannel
    -skip location
    -prefix /home/Qt580/
    -device linux-rcar-m3-g++
    -device-option CROSS_COMPILE=/apt/poky/2.1.2/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-
    -sysroot $ROOTFS
    -opengl es2

    对于报错的模块可以选在skip 掉 。

    执行build.sh 脚本 后,生成Makefile

    make    长达一个多小时 

    make install  安装在 ROOTFS 的 /home/QT580中 

    Qt  Creator   下载  qt-opensource-linux-x64-5.8.0.run  还是之前的下载地址。

    配置交叉编译环境。

    工具栏   ----〉 Options   ----〉 

    左边栏 Build & Run  ,  配置   Compliers    -〉 Manual Add  -〉 GCC -〉 C/C++  全配置成/apt/poky/2.1.2/sysroots/x86_64-pokysdk-linux/usr/bin/aarch64-poky-linux/aarch64-poky-linux-g++

    配置Qt Versions   -〉 Manual       Add     配置   /apt/poky/2.1.2/sysroots/aarch64-poky-linux/home/Qt580/bin/qmake

    配置  Kits   Compiles  选 配置的Manual GCC  ,Qt Version 选择 Menual Version

    Apply 

    新建一个工程

    Kit Selection  选择刚才配置 的KIt  名字    。

    在 demo.pro 配置文件中 添加Opencv  库文件。(交叉编译好了) 

    INCLUDEPATH += /apt/poky/2.1.2/sysroots/aarch64-poky-linux/usr/include
    /apt/poky/2.1.2/sysroots/aarch64-poky-linux/usr/include/opencv
    /apt/poky/2.1.2/sysroots/aarch64-poky-linux/usr/include/opencv2

    LIBS +=
    /apt/poky/2.1.2/sysroots/aarch64-poky-linux/usr/lib/libopencv_*

    编写代码 

    #include "mainwindow.h"
    #include <QApplication>
    #include <iostream>
    #include <opencv2/opencv.hpp>

    using namespace std;
    using namespace cv;

    int main()
    {
    Mat frame0,frame1,frame2,frame3;
    //frame=imread("/media/logo.bmp");
    VideoCapture cap0(0);
    VideoCapture cap1(1);
    VideoCapture cap2(2);
    VideoCapture cap3(3);
    if(!cap0.isOpened())return 1;
    if(!cap1.isOpened())return 1;
    if(!cap2.isOpened())return 1;
    if(!cap3.isOpened())return 1;
    while(1){
    if(!cap0.read(frame0))return 1;
    if(!cap1.read(frame1))return 1;
    if(!cap2.read(frame2))return 1;
    if(!cap3.read(frame3))return 1;
    resize(frame0,frame0,Size(640,480));
    imshow("test0",frame0);
    moveWindow("test0", 0, 0);
    resize(frame1,frame1,Size(640,480));
    imshow("test1",frame1);
    moveWindow("test1",640,0);
    resize(frame2,frame2,Size(640,480));
    imshow("test2",frame2);
    moveWindow("test2",0,480);
    resize(frame3,frame3,Size(640,480));
    imshow("test3",frame3);
    moveWindow("test3",640,480);
    waitKey(30);
    }
    //cout << "Hello world "<<endl;
    // return 0;
    // QApplication a(argc, argv);
    // MainWindow w;
    //w.show();

    // return a.exec();
    return 0;
    }

    配置 ,开发板环境变量  /etc/enviroment   添加  QT_QPA_PLATFORM=linuxfb  ( 还可以指明 那个fb 等等 )或者  程序后  加上  -platform=linuxfb  或者其他显示系统 wayland  X11 等等。

    把交叉编译Qt的 产物 /plugins/platforms/  拷贝到程序执行目录下 。解决

    failed to start because it could not find or load the Qt platform plugin "linuxfb"
    in "".

    完美执行。

  • 相关阅读:
    CSS :hover伪类选择定义和用法
    php disk_free_space与disk_total_space实例介绍
    css required,focus,valid和invalid介绍
    E:in-range伪类选择器与E:out-of-range伪类选择器
    php不使用copy()函数复制文件的方法
    数组金额 转 大写
    PHP GD压缩图片
    php快递查询API类-支持各种快递
    share一段采集程序的代码
    全自动小说订阅微信推送
  • 原文地址:https://www.cnblogs.com/hutiann/p/9517744.html
Copyright © 2020-2023  润新知