基于docker编译嵌入式开发板的三方库
基于docker编译嵌入式开发板的opencv
本文以 海思3519的开发板 举例, 3519的开发板是 armv7l的架构,3559的开发板是aarch64的架构.
查看海思3519 交叉编译器
我们可以看到其交叉编译器是 arm-linux-gnueabi, arm-linux-gnueabi 与 arm-linux-gnueabihf的区别参考这里,为啥要强调arm-linux-gnueabi 和 arm-linux-gnueabihf,是因为我一开始找了一个armv7l的镜像,是arm-linux-gnueabihf的编译器,然后编译出来的opencv用不了.知道了编译器是哪一种后,就可以在 dockerhub 上找对应镜像(注意:gcc版本不要超过交叉编译器的版本(因为GLIBC)).
docker pull resin/armel-debian:stretch-20180604
#docker run --restart=always -p 2347:22 -d -it --ipc=host -i -t -v /home:/home armv7/armhf-ubuntu:16.04 /bin/bash
docker run --restart=always -p 2348:22 -d -it --ipc=host -i -t -v /home:/home resin/armel-debian:stretch-20180604 /bin/bash # 因为3519是 arm-linux-gnueabi 的交叉编译器
docker exec -it 21c3941d7467 /bin/bash #这里容器id 用 docker ps 来获取
然后配置docker的基本环境,首先换源,我是换成阿里源 http://mirrors.aliyun.com ,之后下载软件
uname -m # 查看容器的架构
apt-get update
apt-get install gcc g++ cmake # 只用下载这些,如果需要ffmpeg和x264则自行下载
apt-get install pkg-config libavcodec-dev libavformat-dev libavutil-dev libavresample-dev libswscale-dev x264 ffmpeg # 如果需要编译带ffmpeg的opencv
apt-get install make # debian 的容器需要 安装
查看gcc
编译opencv
cd /home/cc/work/3519/opencv3/opencv-3.2.0
mkdir build
mkdir install
cd build
#cmake -DCMAKE_INSTALL_PREFIX=/home/cc/work/3519/opencv3/opencv-3.2.0/install ..
cmake -DCMAKE_INSTALL_PREFIX=/home/cc/work/3519/opencv3/opencv-3.2.0/install -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. # debian 的容器使用该命令
cmake CMAKE_BUILD_TYPE=RELEASE -DWITH_V4L=ON -DWITH_FFMPEG=ON -DWITH_PNG=ON -DWITH_JPEG=ON -DCMAKE_INSTALL_PREFIX=/home/cc/work/3519/opencv3/opencv-3.2.0/install -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. # 编译带ffmpeg的opencv
make# 多线程编译可能会出现奇怪的错误,出错之后再重新make就不会出现问题
make install