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\n"<<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 "".

完美執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM