Linux OpenCV移植过程详细介绍【FFMPEG编译问题全程解决】

编译环境fedora9.0

xvid版本:xvidcore-1.3.2.tar.gz

x264版本:x264-snapshot-20110612-2245.tar.bz2

yasm版本:yasm-0.7.2.tar.gz

ffmpeg版本:ffmpeg-0.5.3.tar.bz2

opencv版本:opencv-2.0.0

上面这些文件可以到http://download.csdn.net/detail/wc7620awjh/4866855处进行下载!

首先安装x86平台下opencv,网上很多都只有arm上opencv的移植,但对于开发阶段,都是在pc机的linux环境下开发测试的,所以这里先介绍一下x86平台下opencv的移植。

 

 

 

X86 opencv配置安装

这里我们将所有ffmpeg相关的程序(yasm,xvid,x264)都存放在/usr/local/pc/ffmepg目录下,所以先要创建pc/ffmpeg目录

#mkdir -p /usr/local/pc/ffmepg

首先进入/tmp/目录下,将这些yasm.xvid,x264,opencv等压缩文件都放于此目录下并解压缩

1.xvid编译

首先进入xvid的配置目录下

#cd xvidcore/build/generic/

接着进行配置选择,编译及安装

#./configure --enable-shared --prefix=/usr/local/pc/ffmpeg

其中--prefix指定的目录表示安装后要将这些头文件及库文件放在那个目录下的include和lib下

编译安装

#make && make install            //这里&&表示先执行完&&前面的命令,再执行后面的

2.yasm编译

编译yasm的作用是要在编译x264当中需要用到,进入yasm目录下

#cd yasm-0.7.2/

#./configure --prefix=/usr/local/pc/ffmpeg/  --enable-shared

#make && make install

3.x264编译

进入x264目录下,进行配置编译

#cd x264-snapshot-20110612-2245/

#./configure --enable-shared --prefix=/usr/local/pc/ffmpeg/

#make && make install

注意:x264的编译依赖于yasm,所以在编译x264之前需将yasm的include和lib目录下的头文件和库文件告诉系统,有两种解决办法:(1)将刚刚生成的yasm的lib和include目录下的东西拷贝到/usr/include(lib)(一般用户安装的程序都会去这里找依赖的头文件和库文件)下。(2)在配置x264的时候,告诉yasm的头文件和库文件的位置。自己.configure --help看一下就清楚了。


4.ffmepg编译

进入ffmpeg目录下,进行配置编译

#cd ffmpeg-0.5.3

#./configure --prefix=/usr/local/pc/ffmpeg/ --disable-static --enable-shared --enable-gpl --enable-swscale --enable-libx264 --enable-libxvid --disable-stripping --arch=libavcodec/i386/ --enable-ffplay --enable-ffserver  --disable-zlib  --enable-gpl --disable-optimizations --disable-network --extra-libs=-L/usr/local/pc/ffmpeg/lib --extra-ldflags=-L/usr/local/pc/ffmpeg/lib --extra-cflags=-I/usr/local/pc/ffmpeg/include --disable-ipv6 --enable-pthreads

#make && make install

5.Opencv编译

进入Opencv目录下,进行配置

#cd OpenCV-2.0.0/

#./configure  --prefix=/usr/local/pc/opencv/ --with-v4l --without-python --without-swig --without-carbon --without-quicktime --without-1394libs --with-ffmpeg --enable-shared --enable-swscale --enable-gpl CXXFLAGS=-fno-strict-aliasing CFLAGS=-I/usr/local/pc/ffmpeg/include CPPFLAGS=-I/usr/local/pc/ffmpeg/include LDFLAGS=-L/usr/local/pc/ffmpeg/lib

配置后发现Use ffmpeg为no,如下紫色字体部分,在它上面可以看出,checking ffmpeg/avcodec.h usability...no等等都为no,从这几句话可以看出,在配置过程中,它会在/usr/local/pc/ffmpeg/include(因为我们在配置opencv中加入了CFLAGS=-I/usr/local/pc/ffmpeg/include CPPFLAGS=-I/usr/local/pc/ffmpeg/include)下查找ffmpeg下面是否有avcodec.h、avformat.h等头文件,发现找不到(进入/usr/local/pc/ffmpeg/include/目录下,可以发现这些头文件都放在各自自己的目录下了,如avcodec.h放在当前目录下的libavcodec目录下了),所以会出现下面红色字体部分的no.

解决办法:进入/usr/local/pc/ffmpeg/include目录下,新建一个ffmpeg目录(mkdir ffmpeg),将这些头文件都拷贝到此ffmepg目录下,如

cp libavcodec/* ffmpeg/ 

cp libavformat/* ffmpeg/

cp libavutil/* ffmpeg/

cp libswscale/* ffmpeg/

cp libavdevice/* ffmpeg/

checking ffmpeg/avcodec.h usability...no
checking ffmpeg/avcodec.h presence... 
no
checking for ffmpeg/avcodec.h... n
o
checking libavcodec/avcodec.h usability... 
no
checking libavcodec/avcodec.h presence... 
no
checking for libavcodec/avcodec.h... 
no
checking ffmpeg/avformat.h usability... 
no
checking ffmpeg/avformat.h presence... 
no
checking for ffmpeg/avformat.h... 
no
checking libavformat/avformat.h usability... yes
checking libavformat/avformat.h presence... yes
checking for libavformat/avformat.h... yes
checking for library containing avcodec_decode_video... no // 

.......................................................................
.....................................................................
  Video I/O ---------------------
    Use QuickTime / Mac OS X: no
    Use xine:                 no
    Use gstreamer:            no
    
Use ffmpeg:               no
    Use dc1394 & raw1394:     no
    Use dc1394_v2 & raw1394:  no
    Use v4l:                  yes
    Use v4l2:                 yes
    Use unicap:               no

重新配置opencv,发现checking for library containing avcodec_decode_video...任然为no。

解决办法:进入/usr/local/pc/ffmpeg/lib,将这下面所有文件都拷贝到/usr/local/lib目录下

#cp -fr /usr/local/pc/ffmpeg/lib/* /usr/local/lib/

重新配置opencv,这次发现Use ffmpeg   :yes

OK,剩下最后一步,编译安装

#make && make install

 

至此,X86平台下的opencv已经全部安装完毕,所有opencv函数所需的头文件和库文件都在/usr/local/pc/opencv/的include和lib下。

 

ARM OPENCV的移植

编译器:arm-linux-gcc-4.5.1

jpeg库:jpegsrc.v6b.tar.gz

png库:libpng-1.2.18.tar.bz2

zlib库:zlib-1.2.3.tar.gz

opencv版本:opencv-2.0.0

上面几个文件的下载可在此处下载:http://download.csdn.net/detail/wc7620awjh/4869411

 

关于zlib,libpng、libjpeg的安装,本文参考了http://www.linuxidc.com/Linux/2011-09/42826.htm文章,根据自己情况做了相应修改,在这里予以感谢!

 

opencv2.0依赖于zlib,libpng、libjpeg等图形库,而我们的交叉编译工具链是不带这些库的,可以到/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib/(我们安装/opt/FriendlyARM的目录) 目录下自行看一下,既然默认没带这些库,那就需要我们自行交叉编译这些库了!要将其安装到/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include,/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib目录中。

1.zlib库的安装

 # tar zxvf zlib-1.2.3.tar.gz

进入zlib-1.2.3的目录

打开zlib 库配置文件,可以发现它并不支持交叉编译选项,这里我们只能建立软连接,将linux系统自带的gcc指向交叉编译器的arm-linux-gcc:

# cd /usr/bin

建立gcc和ld的副本,为了后面用完之后返回时候所需。

#mv gcc gcc_back

#mv ld ld_back

建立软连接,使系统gcc和ld指向交叉编译器的arm-linux-gcc和arm-linux-ld

#  ln -sv /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc ./gcc

#  ln -sv /opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-ld ./ld

 下面任然进入zlib-1.2.3目录下进行配置编译安装

#./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/ --shared

#make && make install  

进入/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/的include和lib目录下可以发现多了一些文件。

下面将之前的gcc变回去,不然以后开发x86平台的程序就无法编译了。

#rm gcc

#rm ld

#mv gcc_back gcc

#mv ld_back ld

 

2.接下来安装png库

解压libpng-1.2.18.tar.bz2,进入libpng-1.2.18

libpng中没有提供configure脚本,需要自行修改Makefile文件。

#cp scripts/makefile.linux Makefile

#vi  Makefile

 

CC=arm-linux-gcc      //修改这里

MKDIR_P=mkdir -p

 

# where "make install" putslibpng12.a, libpng12.so*,

# libpng12/png.h and libpng12/pngconf.h

# Prefix must be a full pathname.

prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/

exec_prefix=$(prefix)

 

# Where the zlib library and include filesare located.

#ZLIBLIB=/usr/local/lib

#ZLIBINC=/usr/local/include

ZLIBLIB=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib   //修改这里

ZLIBINC=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include//修改这里

保存退出后执行如下命令:

#make && make install

进入/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/的include和lib目录下可以发现多了一些文件。

 

3.接下来安装jpeg库

jpeg库的configure文件在设计方面存在一些问题,如果直接编译会出现错误,提示无法找到libtool,这是因为要先用gcc编译该文件夹下的dummy.c文件,要解决这个问题,要先在本机编译,然后再用make clean操作命令清除本机编译的结果,在进行交叉编译即可。

首先展开本机编译的jpeg库的工作,解压jpegsrc.v6b.tar.gz,并进入jpeg-6b目录,进行配置

#./configure --enable-shared --enable-static

#make

#make clean

接下来进行jpeg库的交叉编译:

#./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/ --host=arm-linux --enable-shared --enable-static

按此命令进行,然后修 改makefile文件将CC的值改为arm-linux-gcc,一定得改!!

#make

安装前需要在 arm-linux 下建个目录,不然安装会出错

#mkdir -pv /opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/man/man1

#make install

进入/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/的include和lib目录下可以发现多了一些文件。

 

接下来安装xvid,yasm,x264和ffmepg

4.xvid安装

解压xvid并进入xvidcore/build/generic
配置
# ./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/ --disable-assembly

修改Makefile易用的platform.inc文件,将CC=gcc改为CC=arm-linux-gcc

#make && make install

 

5.yasm安装

# ./configure --enable-shared --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/ --host=arm-linux
# make
# make install

 

6 x264安装

#./configure --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/ --enable-shared --disable-asm

修改config.mak文件,红色字体是修改后的地方

将ARCH=ARM
CC=
arm-linux-gcc
LD=arm-linux-gcc -o 
AR=arm-linux-ar rc 
RANLIB=
arm-linux-ranlib
STRIP=arm-linux-strip

编译安装x264

#make && make install

7 ffmpeg编译安装

#./configure --cross-prefix="/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-" --enable-cross-compile --target-os=linux --cc=arm-linux-gcc --arch=arm --prefix=/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/ --enable-shared --disable-static --enable-gpl --enable-nonfree --enable-ffmpeg --disable-ffplay --enable-ffserver --enable-swscale --enable-pthreads --disable-yasm --disable-stripping --cpu=armv6 --enable-libx264--extra-cflags=-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/include --extra-ldflags=-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib--enable-libxvid

#make

#make install

 

8 opencv的配置与移植

#./configure --host=arm-linux --without-gtk --without-carbon --without-quicktime --without-1394libs --with-ffmpeg --without-python --without-swig --disable-apps --enable-shared GXX=arm-linux-g++ CPPFLAGS=-I/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/includeLDFLAGS=-L/opt/FriendlyARM/toolschain/4.5.1/arm-none-linux-gnueabi/lib--prefix=/usr/local/arm/arm-opencv --enable-static

#make && make install

你可能感兴趣的:(嵌入式)