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 "".
完美執行。