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

【原文:http://blog.csdn.net/wc7620awjh/article/details/8268447】

编译环境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…nochecking ffmpeg/avcodec.h presence…nochecking for ffmpeg/avcodec.h…nochecking libavcodec/avcodec.h usability…nochecking libavcodec/avcodec.h presence…nochecking for libavcodec/avcodec.h…nochecking ffmpeg/avformat.h usability…nochecking ffmpeg/avformat.h presence…nochecking for ffmpeg/avformat.h…nochecking libavformat/avformat.h usability… yeschecking libavformat/avformat.h presence… yeschecking for libavformat/avformat.h… yeschecking 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的副本,为了后面用完之后返回时候所需。

#mvgcc 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文件。

#cpscripts/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×264安装

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

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

将ARCH=ARMCC=arm-linux-gccLD=arm-linux-gcc-oAR=arm-linux-arrcRANLIB=arm-linux-ranlibSTRIP=arm-linux-strip

编译安装x264

#make && make install

7ffmpeg编译安装

#./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

8opencv的配置与移植

#./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

经历一种身体下了地狱,眼睛进入天堂,灵魂归入故里。

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

相关文章:

你感兴趣的文章:

标签云: