嵌入式开发—交叉编译OpenCV

  • 编译平台:Ubuntu18.04 x86平台
  • 目标平台:ZYNQ-7100 Ubuntu20 ARM
  • 交叉编译工具:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.
  • 方式:使用cmake-gui进行交叉编译。(好像还有一种是在CMakeLists.txt中将gcc编译器设置为交叉编译工具,没研究过。)

一、交叉编译工具的下载与使用

1. 下载

下载地址:https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/
嵌入式开发—交叉编译OpenCV_第1张图片

我选择的是7.5版本,64位。可根据实际需要更换。如果自己的ARM平台是32位,可以用32位编译器,也可以用64位的编译器;但如果ARM是64位,只能用64位的编译器编译。(向下兼容) 可以退到上一层目录,选择对应的32位编译器目录,如下图所示。

嵌入式开发—交叉编译OpenCV_第2张图片

2. 使用

  1. 下载完成之后,解压到自己选定的目录(这里假设解压目录为/home/undergoer/For_ARM/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
    嵌入式开发—交叉编译OpenCV_第3张图片
  2. 接下来,在终端输入cmake-gui打开cmake的界面窗口(前提是你必须安装了cmake-gui,这里不赘述),如下图,第一栏选择opencv的源码目录,第二栏选择一个自己创建的用于存放编译文件的临时目录。
    嵌入式开发—交叉编译OpenCV_第4张图片
  3. 点击Configure,弹框中选择最后一项。
    嵌入式开发—交叉编译OpenCV_第5张图片
  4. 点击Next进入到如下界面。
  • Operating System填写为Linux
  • Compliers中C的编译器选择/home/undergoer/For_ARM/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
  • Compliers中C++的编译器选择/home/undergoer/For_ARM/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
  • Target Root填写为/home/undergoer/For_ARM/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
  • 最后点击Finish。
  • C和C++的编译器路径就在自己交叉编译工具解压目录中的bin文件夹中进行选择
  • 看有些博客也说Target Root 应该填对应的include和lib所在文件夹,在这里就是/home/undergoer/For_ARM/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu。但是这两种目前都可以,应该是有某种深意我还没有接触到,之后碰到再补充吧。

嵌入式开发—交叉编译OpenCV_第6张图片
5. 开始编译

  • 点击Finish之后,它会自己进行一次Configure,一般没有问题,会Configure Done。
  • 然后自己修改CMAKE_INSTALL_PREFIX配置项,可以修改为自己指定的安装目录,方便之后直接复制到ARM中。
  • 修改完成后,再点击一次Configure,Configure Done
  • 再点击Generate,Generate Done
  • 这个时候,就去那个临时目录下打开终端,输入make 指令开始编译
  • 编译完成后,make isntall安装到自己指定的安装目录,复制到ARM中即可。

3. 错误及解决方案

  1. 注意自己ARM对应是32位还是64位,交叉编译工具千万不能弄错。
  2. 我编译过程中,遇到了下图的问题,参考了这位博主的方案,成功解决!
    https://blog.csdn.net/u010571709/article/details/122103591
    嵌入式开发—交叉编译OpenCV_第7张图片

你可能感兴趣的:(#,SLAM,嵌入式交叉编译)