网站菜单

ARM嵌入式开发——CLion交叉编译OpenCV

开发环境

  • 本地主机:X86架构Ubuntu 18.04系统的虚拟机
  • 开发主机:ARM64架构Debian10系统的开发板 RK3399PRO_X
  • CLion2019 3.3
  • OpenCV 3.4

第一步:在本地主机安装OpenCV

因为开发板为ARM64架构,OpenCV安装应选择aarch64的toolchain。详细安装方法参照此文章:

OpenCV交叉编译

第二步:在CLion中编写CMakeList.txt

重点为find_package(OpenCV REQUIRED),另外

不要在CMakeList中指定编译器!!!

不要在CMakeList中指定编译器!!!

不要在CMakeList中指定编译器!!!

#这样是不行的!!!CLion无法在这里指定编译器!!!
set(CMAKE_C_COMPILER "/usr/bin/aarch64-linux-gnu-gcc")
set(CMAKE_CXX_COMPILER "/usr/bin/aarch64-linux-gnu-g++")

详细写法,参考此文章:

CMakeList.txt编写基础

第三步:修改CLion Toolchains

在CLion中,File –> Settings –> Build, Execution, Deployment –> Toolchains

点击 + 号, 新建一个配置,此项目命名为ARM-LINUX,修改C Compiler与 C++ Compiler为第一步中安装的aarch64编译器路径,点击apply。并且选择此项目,点击 ↑ 箭头,将此配置设置为默认。

第四步:Build Project

这里以一个OpenCV项目为例:

#include <opencv2/opencv.hpp>
#include <opencv2/videoio.hpp>
#include <iostream>


using namespace cv;
using namespace std;

int main(){
    Mat frame;
    VideoCapture capture(0);
    namedWindow("CameraCapture", CV_WINDOW_AUTOSIZE);

    Mat image = imread("1.png");

    //read image test
    if (image.data != NULL){
        imshow("sample", image);
        waitKey(0);
    }
    else{
        cout << "Failed to load  file!" << endl;
        return -1;
    }

    //read camera test
    if (!capture.isOpened()){
        cout << "No video stream detected" << endl;
        return -1;
    }
    while (true){
        capture >> frame;
        if(frame.empty()){
            break;
        }
        imshow("camera", frame);
        waitKey(30);
    }
    capture.release();
    return 0;
}

点击Build –> Build Project

不出意外的话程序就编译成功了。

心得:

  1. 编写CMakeList.txt的时候,通过message(WARNING “XXXXX”)来进行简单的debug,确认问题位置
  2. 编写CMakeList.txt的时候,不要在这里声明compiler(官方文档也有说不推荐,现在终于知道为啥不推荐了)。
  3. CLion设置Toolchain的时候,一定要点击 ↑ 箭头将aarch64编译器设置为默认,否则还是使用X86编译器,最后build会出现error adding symbols: file in wrong format错误
显示评论 (0)

文章评论

相关推荐

Yolov5_Seg输出解析

通过矩阵乘法(在代码中称为“matmul”)来计算分割掩码的原因,主要与实例分割网络(例如 YOLOv5 Segmentation)的实现方式有关。这种方法实际上是一种高效的特征图与目标分割系数组合的…

Ubuntu交叉编译Python

在 Ubuntu 上交叉编译 Python 的流程通常用于为不同平台生成可执行文件(如 ARM、MIPS 等)。以下是一般的操作步骤: 1. 安装必要的依赖工具 首先,确保已经安装了编译所需的工具和依…