OpenCV移植到ARM平台---Opencv with ffmpeg to ARM移植总结

1、  linux环境:vm+fedora10(2.6.27.5)

交叉编译:4.3.3

ARM板子:TQ2440 ARM9

准备库: libz  libjpeg libx264libxvid libffmpeg libpng  opencvyasm-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


2、  使用交叉编译器的两种方法

①设置环境变量

export PATH=$PATH:/opt/EmbedSky/4.3.3/bin

注: /opt/EmbedSky/4.3.3是交叉编译器的安装路径

②修改/etc/profile文件

   在环境变量设置代码附近添加:pathmunge/opt/EmbedSky/4.3.3/bin

   注:两者的区别在于作用域不同


3、  libz的交叉编译

进入解压目录进行配置安装

#CC=arm-linux-gcc  ./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi–shared

#make

#make install

注:CC 指定交叉编译器  --prefix 指定安装路径(以后的库文件均安装在此目录下,便于以后的编译连接) –shared 共享库


4、  libjpeg的交叉编译

进入解压目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--enable-shared –enable-static

#gedit Makefile(修改Makefile中cc =arm-linux-gcc ar=arm-linux-ar ar2=arm-linux-ranlib rc)

#make

#make install

注:此时系统报错,在/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/路径下新建目录man/man1,然后再次执行makeinstall 安装成功


5、  libpng的交叉编译

进入解压目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--enable-shared --enable-static  --host=arm-linux

#make

#make install


6、  yasm的交叉编译

进入解压目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--enable-shared --enable-static  --host=arm-linux

#make

#make install


7、  libx264的交叉编译

进入解压目录进行配置安装

#CC=arm-linux-gcc ./configure --enable-shared--host=arm-linux –disable-asm --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi

#make

#make install


8、  libxvid的交叉编译

进入build/generic目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi--host=arm-linux  --disable-assembly

#make

#make install


9、  ffmpeg的交叉编译

进入解压目录进行配置安装

#./configure --prefix=/opt/EmbedSky/4.3.3/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


10、opencv2.0.0的交叉编译

进入解压目录进行配置安装

#./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-appsCXX=arm-linux-g++ CPPFLAGS=-I/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/include/LDFLAGS=-L/opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/lib       --with-v4l --prefix=/opt/EmbedSky/arm/opencv-arm         CXXFLAGS=-O2 --libdir=/opt/EmbedSky/arm/opencv-arm/lib

--includedir=/opt/EmbedSky/arm/opencv-arm/include

#make

此时输出如下配置信息

Generalconfiguration ================================================

 

    CXX:                      arm-linux-g++

    CXXCPP:                   arm-linux-g++ -E

    CPPFLAGS:                 -I/home/xiaofevg/new/arm/4.3.2/arm-none-linux-gnueabi/include/

    CXXFLAGS:                 -O2

    LDFLAGS:                 -L/home/xiaofevg/new/arm/4.3.2/arm-none-linux-gnueabi/lib

 

    Install path:            /home/xiaofevg/new/arm/4.3.2/arm-none-linux-gnueabi

 

    Debug flags                

    Optimization flags        -DNDEBUG -O2 -fomit-frame-pointer

    MMX/SSE/SSE2/SSE3:        

    OpenMP support:           

    External BLAS & LAPACK:   no

 

HighGUIconfiguration ================================================

 

    Windowing system --------------

    Use Carbon / Mac OS X:    no

    Use gtk+ 2.x:             no

    Use gthread:              no

 

    Image I/O ---------------------

    Use ImageIO / Mac OS X:   no

    Use libjpeg:              yes

    Use zlib:                 yes

    Use libpng:               yes

    Use libtiff:              no

    Use libjasper:            no

    Use libIlmImf/OpenEXR:    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

 

Wrappers forother languages =========================================

 

    SWIG                      

    Python                    no

    Octave                    no

 

Additional buildsettings ============================================

 

    Build demo apps           no

 

Now run make...

 

由此可知ffmpeg并没有编译进Opencv,查看config.log文件,阅读里面的信息可知libavutil和libx264两个库文件没有找到,由此才产生了以上的结果。在配置命令行中添加LIBS=”-lavutil –lx264”,再次make,此时输出的配置信息中Use ffmpeg:     yes,配置带ffmpeg的Opencv成功。

#make install


11、将opencv-arm/lib中的动态库文件libcv.so.4.0.0,libcvaux.so.4.0.0,libhighgui.so.4.0.0,

Libcxcore.so.4.0.0,libml.so.4.0.0拷出并且重命名为*.so.4,再和上面编译出的其他动态库文件一起拷贝到开发板的/usr/lib目录下即可。至此Opencv移植完成,将交叉编译出的二进制代码拷到板子中,修改权限即可执行。


12、关于交叉编译Opencv程序时Makefile文件的编写

OBJ=test1

CC=arm-none-linux-gnueabi-g++

CFLAGS=-I/opt/EmbedSky/arm/opencv-arm/include/opencv/

LDFLAGS=-L/opt/EmbedSky/arm/opencv-arm/lib/-lcv -lcxcore -lpthread -lrt -lcvaux -lm -lpng -ljpeg -lz -lml -lhighgui -ldl-lavcodec -lavdevice -lavformat -lavutil -lswscale -lx264 -lxvidcore

$(OBJ):$(OBJ).o

$(CC) $(OBJ).c -o $(OBJ) $(CFLAGS)$(LDFLAGS)

clean:

                    rm-f *.o *~ $(OBJ)

当编译其他程序时,修改test1即可。

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