使用docker交叉编译opencv2.4.9
因为要在开发板上使用opencv 2.4.9,版本较老,无法直接在ubuntu18.04LTS上编译,所以使用docker虚拟容器来编译opencv。
安装docker 和ubuntu14.04镜像
ubuntu18.04已经默认安装好了docker,可以直接使用。其他版本使用
wget -qO- https://get.docker.com/ | sh
命令来安装
启动docker服务
service docker start
安装好后在/etc/default/docker文件中末尾增加一行:
DOCKER_OPTS="–registry-mirror=http://hub-mirror.c.163.com"
然后重新运行docker服务:
service docker restart
从远程仓库拉取ubuntu 14.04镜像
docker pull ubuntu:14.04
查看获得的镜像
docker images
运行ubuntu镜像
docker run -t -i ubuntu:14.04 /bin/bash
结果如下
root@ea25e72ee089:/#
@后面跟的是该容器的id,保存的时候切记先在另一个终端使用docker commit [id] [name]保存后再关闭原来运行docker这个终端,docker不是虚拟机,不会自动保存容器内做的修改。
使用阿里云的源
vi /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
修改完成后更新源
apt-get update
安装交叉编译opencv必要的安装包
apt-get install build-essential cmake git libgtk2.0-dev pkg-config python-dev python-numpy libavcodec-dev libavformat-dev libswscale-dev libjpeg-dev libpng-dev wget libcanberra-gtk-module gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
交叉编译
下载并解压opencv
wget https://github.com/opencv/opencv/archive/2.4.9.tar.gz
tar -zxvf 2.4.9.tar.gz
cd opencv-2.4.9**
修改 platforms/linux/arm-gnueabi.toolchain.cmake
去掉交叉编译器的版本
set(CMAKE_C_COMPILER arm-linux-gnueabi${FLOAT_ABI_SUFFIX}-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabi${FLOAT_ABI_SUFFIX}-g++)
执行自带的交叉编译的脚本
./platforms/scripts/cmake_arm_gnueabi_hardfp.sh
修改cmake脚本
因为编译脚本的bug造成找不到CMAKE_AR程序,所以手动修改下cmake脚本
cd build_linux_arm_hardfp
vi CMakeFiles/2.8.12.2/CMakeCCompiler.cmake
修改为:
set(CMAKE_AR "arm-linux-gnueabihf-ar")
编译生成opencv2.4.9
make
make install
生成的opencv库文件在install目录下
将生成的目录拷贝到主机目录/tmp下
docker cp ea25e72ee089:opencv2.4.9/platforms/build_linux_arm_hardfp/install /tmp