基于ARM 的Linux系统的交叉编译

返回:OpenCV系列文章目录(持续更新中......)

上一篇:在 MacOS 中安装

下一篇:MultiArch与Ubuntu/Debian 的交叉编译

警告

本教程可以包含过时的信息。

此步骤已在 Ubuntu Linux 12.04 上进行了测试,但应该适用于其他 Linux 发行版。我在其他发行版的情况下,包名和交叉编译工具的名称可能会有所不同。ARM 平台上使用了几种流行的 EABI 版本。本教程是为 gnueabignueabihf 编写的,但其他变体应该只需进行最小的更改即可使用。

前提:

  • 使用 Linux 的主机;

  • Git的;

  • CMake 2.6 或更高版本;

  • ARM 交叉编译工具:gcc、libstc++ 等。根据目标平台,您需要选择 gnueabignueabihf 工具。gnueabi 的安装命令:

    bash 复制代码
    sudo apt-get 安装 gcc-arm-linux-gnueabi
    bash 复制代码
    gnueabihf 的安装命令:
    bash 复制代码
    sudo apt-get install gcc-arm-linux-gnueabihf

    包设置;

  • 用于主机系统的 Python 2.6;

  • [可选] armeabi(hf) 的 ffmpeg 或 libav 开发包:libavcodec-dev、libavformat-dev、libswscale-dev;

  • [可选]GTK+2.x 或更高版本,包括 armeabi(hf) 的标头 (libgtk2.0-dev);

  • [可选] libdc1394 2.x;

  • [可选] libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev for armeabi(hf).

获取OpenCV源代码

您可以使用 sourceforge 中提供的最新稳定 OpenCV 版本,也可以从我们的 Git 存储库中获取最新的快照。

获取最新的稳定OpenCV版本

从Git存储库获取尖端的OpenCV

启动 Git 客户端并克隆 OpenCV 存储库

在 Linux 中,可以通过终端中的以下命令来实现:

bash 复制代码
cd ~/<my_working _directory>
git clone https://github.com/opencv/opencv.git

编译 OpenCV

  1. 创建一个生成目录,使其成为当前目录,然后运行以下命令:

    bash 复制代码
    cmake [<some optional parameters>] -DCMAKE_TOOLCHAIN_FILE=<path to the OpenCV source directory>/platforms/linux/arm-gnueabi.toolchain.cmake <path to the OpenCV source directory>

    默认情况下,工具链使用 gnueabihf EABI 约定。添加 -DSOFTFP=ON cmake 参数以打开 softfp 编译器。

    bash 复制代码
    cmake [<some optional parameters>] -DSOFTFP=ON -DCMAKE_TOOLCHAIN_FILE=<path to the OpenCV source directory>/platforms/linux/arm-gnueabi.toolchain.cmake <path to the OpenCV source directory>

    例如:

    bash 复制代码
    cd ~/opencv/platforms/linux
    mkdir -p build_hardfp
    cd build_hardfp
    cmake -DCMAKE_TOOLCHAIN_FILE=../arm-gnueabi.toolchain.cmake ../../..
  2. 在 build(<cmake_binary_dir>)目录中运行:

    bash 复制代码
    make

注意

或者,您可以通过 install/strip make target 从创建的库中去除符号信息。此选项生成更小的二进制文件(小两倍),但使进一步调试更加困难。

启用硬件优化

根据目标平台架构,可以使用不同的指令集。默认情况下,编译器为没有 VFPv3 和 NEON 扩展的 armv5l 生成代码。将 -DENABLE_VFPV3=ON 添加到 cmake 命令行以启用 VFPv3 的代码生成,并将 -DENABLE_NEON=ON 添加到使用 NEON SIMD 扩展。

多核 ARM SoC 也支持 TBB。添加 -DWITH_TBB=ON 和 -DBUILD_TBB=ON 以启用它。Cmake 脚本从项目官网下载TBB源码GitHub - oneapi-src/oneTBB: oneAPI Threading Building Blocks (oneTBB) 并编译建。参考文献:

1、《Cross compilation for ARM based Linux systems》--Alexander Smorkalov

相关推荐
韩楚风2 小时前
【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
linux·服务器·性能优化·架构·gnu
陈苏同学2 小时前
4. 将pycharm本地项目同步到(Linux)服务器上——深度学习·科研实践·从0到1
linux·服务器·ide·人工智能·python·深度学习·pycharm
Ambition_LAO2 小时前
解决:进入 WSL(Windows Subsystem for Linux)以及将 PyCharm 2024 连接到 WSL
linux·pycharm
Pythonliu72 小时前
茴香豆 + Qwen-7B-Chat-Int8
linux·运维·服务器
你疯了抱抱我3 小时前
【RockyLinux 9.4】安装 NVIDIA 驱动,改变分辨率,避坑版本。(CentOS 系列也能用)
linux·运维·centos
追风赶月、3 小时前
【Linux】进程地址空间(初步了解)
linux
栎栎学编程3 小时前
Linux中环境变量
linux
挥剑决浮云 -3 小时前
Linux 之 安装软件、GCC编译器、Linux 操作系统基础
linux·服务器·c语言·c++·经验分享·笔记
小O_好好学4 小时前
CentOS 7文件系统
linux·运维·centos
哲伦贼稳妥5 小时前
一天认识一个硬件之机房地板
运维·网络·经验分享·其他