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
这些库在其对应的官网都可以找到。
之前我也试过其他的版本,但是会出现许多版本不兼容,或者缺少某项功能的问题。如果利用其他版本进行编译,有可能会存在其他问题。有人成功编译过带ffmpeg的opencv-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 (修改Makefile中cc =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