本文是在ubuntu16.04的环境下移植Opencv3.4.1为能在IMX6ULLSOC下使用的库文件,要移植供Ubuntu16.04使用的opencv请选择对应的编译器。
一、安装交叉编译工具
1、下载交叉编译器
由于笔者移植Opencv的目的是要在ARM环境下使用,所以需要编译出对应的.so文件。因此选择的是arm-linux-gnueabihf。
下载链接:
2、安装交叉编译器
Ubuntu 目录下创建/usr/local/arm 文件夹,将编译器安装到该文件夹
sudo mkdir /usr/local/arm
解压下载的编译器压缩包
sudo tar xf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz -C /usr/local/arm/
修改profile文件内容
sudo vim /etc/profile
在文件末尾添加以下内容
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
保存退出,重启系统。
3、验证交叉编译器
先安装依赖库
sudo apt-get install lsb-core lib32stdc++6
查看版本号,确认是否安装成功
arm-linux-gnueabihf-gcc -v
如果版本号对应自己压缩包上的信息则安装成功。
二、下载Opencv源码
下载链接
opencv下载链接
如本文所描述,选择opencv-3.4.1版本。
三、搭建Opencv编译环境
1、解压文件+创建路径
拷贝下载的源码压缩包到目录下。笔者拷贝到 /home/zwz(用户名) 目录下。解压并且查看文件内容,确保无误。
tar xf opencv-3.4.1.tar.gz
cd opencv-3.4.1/
ls
创建编译和安装文件夹
mkdir build install
ls
安装 cmake 和 cmake-gui 工具
sudo apt-get install cmake cmake-qt-gui cmake-curses-gui
进入build文件夹下,打开配置界面。
cd build
cmake-gui
2、配置图形化工具cmake-gui
2.1选择源码目录和编译目录
选择好源码目录和编译文件存放的目录。
2.2指定交叉编译工具的具体路径
指定交叉编译工具的具体路径:
联系到上文提到的安装编译器的路径:/usr/local/arm,所以在该目录下即可找到编译器的路径。
名称 | 路径 |
---|---|
Operation System | linux(任取一个名字) |
Compilers C | /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc |
Compilers C++ | /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ |
Targer Root | /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin |
配置完成后点击右下角 Finish 即可
2.3指定依赖库的链接参数
CMAKE_EXE_LINKER_FLAGS 处添加上“-lpthread -lrt -ldl”。
2.4更改安装目录
2.5生成 Makefile 等文件
先点击左下角 Configure,再点击 Generate即可生成。
四、编译Opencv源码
4.1修改common.cc
由于HAVE_PTHREAD 宏定义了 pthread 库,所以需要在common.cc中宏定义HAVE_PTHREAD,使其支持pthread库。
由于coommon.cc路径为opencv-3.4.1/3rdparty/protobuf/s
rc/google/protobuf/stubs/common.cc,所以到opencv源码目录下输入以下命令:
vim 3rdparty/protobuf/src/google/protobuf/stubs/common.cc
找到注释刚结束的行插入#define HAVE_PTHREAD
(笔者在第33行插入)以确保能生效。
4.2编译Opencv源码
进入前面创建的build文件夹下,一般这时候终端路径应该是在opencv源码文件夹目录下。所以:
cd build
make -j 16
build完成后,执行:
make install
然后查看install目录下是否有新增文件,如果有的话一般就是编译完成了,打开install/lib文件夹即可查看到opencv相关.so文件。
ls ../install
ls ../install/lib
五、编译源码过程中遇到的错误
arm-linux-gnueabihf-g++: internal compiler error: 已杀死 (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See http://gcc.gnu.org/bugs.html for instructions.
modules/dnn/CMakeFiles/opencv_dnn.dir/build.make:283: recipe for target ‘modules/dnn/CMakeFiles/opencv_dnn.dir/misc/caffe/opencv-caffe.pb.cc.obj’ failed
make[2]: *** [modules/dnn/CMakeFiles/opencv_dnn.dir/misc/caffe/opencv-caffe.pb.cc.obj] Error 4
原因:机器内存不足
解决方法:清理内存或者参考此博客->解决办法
Makefile:160: recipe for target ‘all’ failed
可能是依赖包没有装全,搜索一下补充即可:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev # 处理图像所需的包
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev # 处理视频所需的包
sudo apt-get install libatlas-base-dev gfortran # 优化opencv功能
sudo apt-get install ffmpeg
安装过Anaconda对此会有影响->解决方法
六、总结
1、点赞 2、收藏 3、关注