Linux下交叉编译opencv

1、下载opencv源码

下载地址:https://opencv.org/releases/

选择你需要的版本,点击Sources。

linux系统下编译cuda版本的opencv linux编译opencv源码_opencv


将源码放在ubuntu随便一个目录下并解压

linux系统下编译cuda版本的opencv linux编译opencv源码_linux_02


进入解压好的opencv目录,创建两个文件夹build和install:

linux系统下编译cuda版本的opencv linux编译opencv源码_opencv_03

2、cmake-gui配置:

首先打开cmake-gui,若没有,请使用sudo apt-get install安装、

linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_04


圆圈处填上opencv源码路径,矩形处填刚刚创建的build路径。

linux系统下编译cuda版本的opencv linux编译opencv源码_嵌入式硬件_05


点击configure

linux系统下编译cuda版本的opencv linux编译opencv源码_linux_06


这两个地方和我选一样的

linux系统下编译cuda版本的opencv linux编译opencv源码_嵌入式硬件_07


Target System →Operating System 填写Linux (L大写,填入其他如:linux-arm,后面configure会出现错误);

Compliers → C and Complier → C++填入对应交叉编译工具链gcc和g++路径;

Target Root: 交叉编译工具链bin目录路径

Finish; 无报错

交叉编译工具自行下载,网上一堆教程。

linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_08

配置结束就是这样

linux系统下编译cuda版本的opencv linux编译opencv源码_嵌入式硬件_09


在cmake-gui中取消勾选WITH_1394

然后把这个位置换成刚刚创建的install目录:

linux系统下编译cuda版本的opencv linux编译opencv源码_交叉编译_10

3、开始编译

进入build目录,使用sudo make -j4开始编译,这个过程很漫长。。。

linux系统下编译cuda版本的opencv linux编译opencv源码_嵌入式硬件_11


linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_12


报错:

linux系统下编译cuda版本的opencv linux编译opencv源码_linux_13


往上翻发现:

linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_14


修改这个文件:

linux系统下编译cuda版本的opencv linux编译opencv源码_交叉编译_15


加上这一行,保存、退出,

#define HAVE_PTHREAD

make clean一下,再重新编译

linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_16


新错误:

linux系统下编译cuda版本的opencv linux编译opencv源码_嵌入式硬件_17


修改方法:

进入报错文件:

linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_18


加上图中这一句:

加上这一行,保存、退出,

make clean一下,再重新编译

linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_19


新错误:

linux系统下编译cuda版本的opencv linux编译opencv源码_嵌入式硬件_20


解决方法:

进入${HOME}/opencv-3.3.14/3rdparty/libpng/pngpriv.h

将这一段代码

# if (defined(ARM_NEON) || defined(__ARM_NEON)) && */

改成

# if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) && \

编译成功:

linux系统下编译cuda版本的opencv linux编译opencv源码_嵌入式硬件_21

4、安装:

在build下面继续执行make install:

linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_22


进入install目录查看:

linux系统下编译cuda版本的opencv linux编译opencv源码_linux_23


出现以上文件表示编译成功!

5、编译安装opencv扩展库:

先将opencv_contrib-4.5.2,版本和你编译的opencv版本要一样.

linux系统下编译cuda版本的opencv linux编译opencv源码_ubuntu_24

找到 OPENCV_EXTRA_MODULES_PATH 项,选择扩展库源码 opencv_contrib目录下的 modules 目录

点击 Configure ,生成配置

点击 Generate ,生成 Makefile

make -j8
make install

生成的扩展库会在install/lib目录下。

6、移植到嵌入式设备上:

将编译好的install文件夹放在板子的任意位置

打开 /etc/ld.so.conf文件

vi /etc/ld.so.conf

添加库的绝对路径,例如:

/usr/install/lib

保存并退出

生效路径

ldconfig

大功告成!