最近接触到一个项目扫描二维码,所以接触到opencv库与zbar,需要编译安装opencv库,所以写这篇博客,当做是一个学习的过程与记录。如果将来还需要用到也可以继续翻一翻。
这里用到的opencv版本是3.2.0,下载网站在这里:https://www.opencv.org/releases.html
交叉编译工具:arm-linux-gcc-4.4.3
系统:Ubuntu16.04
各种编译之前的依赖库和交叉编译工具可以在这里下载:https://download.csdn.net/download/kaychangeek/10120278
把交叉编译压缩包放到桌面,进行解压安装:
sudo tar -zxvf arm-linux-gcc-4.4.3.tar.gz
然后检测是否安装成功,进入到交叉编译器的bin目录下,输入命令行:
sudo ./arm-none-linux-gnueabi-gcc -v
这个时候可能会报错:说找不到arm-none-linux-gnueabi-gcc,但是通过目录查看:如下图:
发现其其实是存在的。
所以在命令行敲入:apt-get install libc6-i386 即可解决。
然后添加编译器地址到系统环境变量:
vim /etc/profile
然后在最后一行添加:export PATH=$PATH:/home/chris/Desktop/opt/FriendlyARM/toolschain/4.4.3/bin
保存退出然后 source /etc/profile
然后输入 echo $PATH 看看有没有刚刚输入的路径输出,如果有就是成功的,即可以在任意的目录下输入命令行:
arm-none-linux-gnueabi-gcc -v
如果输出如图,则交叉编译器安装成功:
首先,先解压opencv的源码,在opencv源码下创建目录 output 跟 build。
cd opencv-3.2.0
mkdir build output
接着编译安装第三方依赖库:
说明:由于opencv的编译安装依赖很大第三方库源,所以需要先对这些第三方库进行交叉编译然后才能编译安装opencv,这些第三方依赖库在打包的文件夹里面一并提供,接着编译安装第三方依赖库;
将这些库拷贝到一个路径下,对他们一一的进行解压缩,解压缩后如下图所示:(注:解压.tart.gz使用命令tar -zxvf xxx.tar.gz,解压.tar.bz2使用命令tar -jxvf xxx.tar.bz2,解压.tar.xz先用xz -d xxx.tar.xz,这时候会输出对应的.tar文件,再用tar -xvf xxx.tar解压即可。) 解压完成后,继续在/etc/profile下面最后一行添加:
export OPENCV_3THPARTY_LIB=/home/chris/Desktop/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/
这是为了将编译出来的第三方依赖库安装在此目录下。
然后source该文件,验证是否添加成功,输入:echo $OPENCV_3THPARTY_LIB 。
cd zlib-1.2.8
CC=arm-linux-gcc ./configure --prefix=$OPENCV_3THPARTY_LIB --shared
出现以下错误:
解决:
在configure 删除以下字段,避免将warn处理为error :
echo "Checking for obsessive-compulsive compiler options..." >> configure.log
if try $CC -c $CFLAGS $test.c; then
:
else
echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log
leave 1
fi
重新CC=arm-linux-gcc ./configure --prefix=$OPENCV_3THPARTY_LIB --shared
然后打开Makefile,vim Makefile,然后将AR=ar改成AR=arm-linux-ar,RANLIB改成arm-linux-ranlib。
make
然后发现继续出现以下错误:
解决:apt-get install lib32z1
然后继续 make make install
cd jpeg-9b
./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared
make make install
cd libpng-1.6.32
./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --enable-static
make make install
cd yasm-1.3.0
CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-asm
make make install
cd x264-snapshot-20171114-2245
CC=arm-linux-gcc ./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-asm
make make install
cd xvidcore-1.3.3
cd build/generic
./configure --host=arm-linux --prefix=$OPENCV_3THPARTY_LIB --disable-assembly
cd ffmpeg-3.4
./configure --prefix=$OPENCV_3THPARTY_LIB --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm --disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-linux-gcc --enable-swscale --extra-ldflags=-L$OPENCV_3THPARTY_LIB/lib --extra-cflags=-I$OPENCV_3THPARTY_LIB/include
make make install
到此,opencv依赖的第三方库交叉编译完成。
首先安装Cmake
sudo apt-get install cmake cmake-qt-gui
运行Cmake程序:在opencv下build目录下输入命令:cmake-gui 得到如图所示:
在Where is the source code选择源码目录
Where to build the binaries选择源码目录下的build目录
然后点击Configure。
得到:
选择第四个,得到:
然后按照图这样填:
然后去掉一些不需要编译的模块,在search下搜索WITH_TIFF,WITH_GTK,去掉勾选,搜索CMAKE_BUILD_TYPE,把值改为Release,搜索CMAKE_INSTALL_PREFIX,将这个值改为目录output路径。然后如果想要编译静态库可以搜索BUILD_SHARED_LIBS,去掉勾选。如图:
然后点击Generate生成Makefile,如果成功可以看到下面会有一个:
然后关掉Cmake,进入opencv下的build目录,打开CMakeCache.txt,找到CMAKE_EXE_LINKER_FLAGS这一行,在其后面加上 -lpthread -lrt -ldl (链接属性),进行make:
然后发现报错:
解决:打开该文件定位到错误行,将abs改成fabs,再进行make。完成之后进行 make install:
编译成功后进入到output的lib目录下,可以看到:
表示编译成功。接下来就可以编译可执行文件到arm板上运行啦。下面不再展示赘述:可以参考下面的博主文章:
链接:https://blog.csdn.net/KayChanGEEK/article/details/78552418