OpenCV移植到ARM9

3714阅读 0评论2012-12-27 qizheguang
分类:

 

linux环境:ubuntu-10.0.4

交叉编译:4.3.2

arm板子:basicarm2440

准备库:libz  libjpeg libx264 libxvid libffmpeg libpng  opencv yasm-0.7.2

版本:

libz:    zlib-1.2.3

libjpeg:   jpegsrc.v6b

libpng:   libpng-1.2.18

libyasm:   yasm-0.7.2

opencv:    opencv-2.0.0

libx264:   x264-snapshot-20110612-2245-stable

libxvid:   xvidcore-1.3.2

lffmpeg:   ffmpeg-0.5.3

这些库在其对应的官网都可以找到。

之前我也试过其他的版本,但是会出现许多版本不兼容,或者缺少某项功能的问题。如果利用其他版本进行编译,有可能会存在其他问题。有人成功编译过带ffmpegopencv-1.0.0,其版本组合如下(但是我没有移植成功,可能是我的交叉编译器的问题吧,我的是:4.3.2):

libz:    zlib-1.2.3

libjpeg:   jpegsrc.v6b

libpng:   libpng-1.2.18

libyasm:   yasm-0.7.2

opencv:    opencv-1.0.0

libx264:   x264-snapshot-20050911-2245

libxvid:   xvidcore-1.1.3

lffmpeg:   ffmpeg-0.4.9-p20051120

 

值得一提的是ffmpeg-0.4.9不包含swscale,因此无法操作img_convert, 所以舍去不用。

下面是opencv-2.0.0的移植过程。(简略了解压安装包的过程)

 

1, 设置环境变量:

代码:

export PATH=$PATH:/usr/local/arm/4.3.2/bin

说明:/usr/local/arm/4.3.2/bin是我的交叉编译工具所在目录。

下面所有编译的库都放在目录:/usr/local/arm/4.3.2/arm-none-linux-gnueabi下。这么做的原因是避免在编译其他库时,需要重新指定依赖库的路径,经验告诉我,这样做同时能够消除,依赖库路径所带来的麻烦。

2, libz的交叉编译:

进入libz的目录:

CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi --shared

#make

#make install

3, libjpeg的交叉编译:

进入jpeg的目录:

#./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi --enable-shared enable-static

#gedit Makefile (修改Makefilecc =arm-linux-gcc ar=arm-linux-ar ar2=arm-linux-ranlib)

#make

make之后会出现这样的错误:”

./libtool --mode=compile arm-linux-gcc -O2  -I. -c ./jcapimin.c

make: ./libtool: Command not found

make: *** [jcapimin.lo] Error 127

解决办法: 检查自己系统下有没有libtool,如果没有那么自己装一个;装完之后把config.guess &&config.sub复制到jpeg目录下:

#cp /usr/share/libtool/config/config.sub ./

#cp /usr/share/libtool/config/config.guess ./

 

之后执行:

#make install

make install 时又出现错误:

/usr/bin/install: cannot create regular file `/usr/local/libjpeg/bin/cjpeg': No such file or directory

make: *** [install] Error 1

解决办法:在/usr/local/arm/4.3.2/bin下建立4个目录:

#mkdir bin

#mkdir lib

#mkdir include

#mkdir man/man1

 

然后,

#make install

4, libpng的交叉编译

进入png的目录:

#./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi --enable-shared --enable-static --host=arm-linux

#make

#make install

5, yasm的交叉编译:

进入yasm目录:

#./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi --enable-shared --enable-static --host=arm-linux

#make

#make install

 

6, libx264的交叉编译:

进入x264目录:

#CC=arm-linux-gcc ./configure --enable-shared --host=arm-linux disable-asm --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi

#make

#make install

7, libxvid的交叉编译:

进入build/generic目录:

#./configure --prefix=/usr/local/libxvid --host=arm-linux  --disable-assembly

#make

#make install

8, ffmpeg的交叉编译:

进入ffmpeg目录:

#./configure --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi --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

#make

#make install

 

9, opencv2.0.0的交叉编译:

进入opencv2.0.0目录:首先,修改configure文件:

#gedit configure

 

搜索-lavcodec,定位到大概18182行的位置,在“FFMPEGLIBS="-lavcodec -lavformat” 后添加 “-lswscale”, 修改之后变为:“FFMPEGLIBS="-lavcodec -lavformat -lswscale $FFMPEG_SWSCALE_LIBS"”,然后保存退出。

在终端中输入:

#./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --without-quicktime --without-1394libs --with-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/usr/local/arm/4.3.2/arm-none-linux-gnueabi/include/ LDFLAGS=-L/ usr/local /arm/4.3.2/arm-none-linux-gnueabi/lib --with-v4l --prefix=/usr/local/arm/4.3.2/arm-none-linux-gnueabi  CXXFLAGS=-O2

#make

#make install

 

到此,opencv-2.0.0的一直算是成功了。接下来,需要把所有的库烧写到arm板子上去,如果烧写到根目录的lib目录下,那么不用指定LD-LIBRARY-PATH,反之则反之。
 
本文部分内容选自:
上一篇:main之前
下一篇:opencv移植到tq2440