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即可。