【原文: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
经历一种身体下了地狱,眼睛进入天堂,灵魂归入故里。