因为项目需要,需要在主机上交叉编译,想在主机上安装能在arm64版本的opencv。
因为对编译过程的不了解,所以上网查阅了很多资料,发现网上大多数都是直接安装主机环境的opencv,很少有交叉编译版本的安装教程,我费尽周折终于安装并且编译完毕。于是,把自己的学习经历记录下来,希望能帮到和我一样的初学者。
主机:ubuntu20.04
目标机:野火鲁班猫4:RK3588
一、主机步骤
- 首先安装依赖包
sudo apt update
sudo apt install build-essential cmake git pkg-config libgtk-3-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
gfortran openexr libatlas-base-dev python3-dev python3-numpy \
libtbb2 libtbb-dev libdc1394-22-dev
- 安装arm64版本的交叉编译器(如果是arm平台则安装
gcc-arm-linux-gnueabi
和g++-arm-linux-gnueabi
,后文相应位置也是得替换)
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
- 在家目录下制作cmake交叉编译工具链文件
aarch64-toolchain.cmake
cd ~
vim aarch64-toolchain.cmake
把以下代码复制进去
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(CMAKE_C_COMPILER /path/to/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /path/to/aarch64-linux-gnu-g++)
set(CMAKE_FIND_ROOT_PATH /path/to/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
- 创建文件夹
opencv_src
并且进入,下载OpenCV和OpenCV Contrib模块
mkdir ~/opencv_src && cd ~/opencv_src
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
- 进入opencv目录,创建构建目录并且配置CMake
cd opencv
mkdir build_arm64 && cd build_arm64
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_TOOLCHAIN_FILE=/home/xbpc/aarch64-toolchain.cmake \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4_arm64 \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/xbpc/opencv_src/opencv_contrib/modules\
-D BUILD_EXAMPLES=ON ..
以下是每个CMake参数的详细解释:
-
-D CMAKE_BUILD_TYPE=RELEASE
- 解释:指定构建类型为Release,以启用编译器优化并生成更快的代码。其他常见的构建类型包括
DEBUG
、RELWITHDEBINFO
(Release with Debug Information)和MINSIZEREL
(Minimum Size Release)。
- 解释:指定构建类型为Release,以启用编译器优化并生成更快的代码。其他常见的构建类型包括
-
-D CMAKE_TOOLCHAIN_FILE=/home/xbpc/aarch64-toolchain.cmake
- 解释:指定工具链文件,用于交叉编译。这个文件包含了编译器、链接器等工具的路径和设置,适用于为不同架构(如ARM64)编译代码。
-
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4_arm64
- 解释:指定OpenCV的安装路径。编译完成后,OpenCV库和相关文件将被安装到该路径下。通常,默认的安装路径是
/usr/local
。
- 解释:指定OpenCV的安装路径。编译完成后,OpenCV库和相关文件将被安装到该路径下。通常,默认的安装路径是
-
-D INSTALL_C_EXAMPLES=ON
- 解释:启用安装C语言示例代码。这些示例代码有助于开发者学习如何使用OpenCV的C语言接口。
-
-D INSTALL_PYTHON_EXAMPLES=ON
- 解释:启用安装Python语言示例代码。这些示例代码有助于开发者学习如何使用OpenCV的Python接口。
-
-D OPENCV_GENERATE_PKGCONFIG=ON
- 解释:生成pkg-config文件。这些文件可以帮助开发者在编写应用程序时轻松找到和链接OpenCV库。
-
-D OPENCV_EXTRA_MODULES_PATH=/home/xbpc/下载/opencv_src/opencv_contrib/modules
- 解释:指定OpenCV Contrib模块的路径。这些模块是OpenCV的扩展模块,提供了更多的功能和特性。例如,非免费或实验性的算法。
-
-D BUILD_EXAMPLES=ON
- 解释:启用构建OpenCV示例代码。启用此选项后,示例代码将会被编译,可以帮助开发者了解如何使用OpenCV的各种功能。
-
编译
make -j$(nproc)
- 安装
sudo make install
- 查看版本
pkg-config --modversion opencv4
二、目标机步骤
因为要在目标机运行所以,目标机上也得装一套。
- 首先安装依赖包
sudo apt update
sudo apt install build-essential cmake git pkg-config libgtk-3-dev \
libavcodec-dev libavformat-dev libswscale-dev libv4l-dev \
libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev \
gfortran openexr libatlas-base-dev python3-dev python3-numpy \
libtbb2 libtbb-dev libdc1394-22-dev
- 创建文件夹
opencv_src
并且进入,下载OpenCV和OpenCV Contrib模块
mkdir ~/opencv_src && cd ~/opencv_src
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
- 进入opencv目录,创建构建目录并且配置CMake
cd opencv
mkdir build_arm64 && cd build_arm64
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4_arm64 \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/cat/opencv_src/opencv_contrib/modules\
-D BUILD_EXAMPLES=ON ..
- 编译
make -j$(nproc)
- 安装
sudo make install
- 查看版本
pkg-config --modversion opencv4
好啦,现在已经可以愉快的编译运行啦,有问题欢迎交流。