linux环境:ubuntu-12.0.4
交叉编译:4.4.1
arm板子:华天正的210板子
板子环境:linux2.6.35
准备库:libz libjpeg
libxvid libpng opencv yasm-0.7.2 libtool
注:本人没有把ffmpeg编进去 以后会尝试
版本:
交叉编译器4.4.1: arm-2009q3.tar.bz2
libz: zlib-1.2.3
libjpeg: jpegsrc.v6b
libpng: libpng-1.2.18
libyasm: yasm-0.7.2
opencv: opencv-2.0.0
libxvid: xvidcore-1.3.2
libtool: libtool-2.2.4.tar.gz
1, 安装交叉编译器
解压arm-2009q3.tar.bz2到/usr/local/arm/目录下,修改文件夹名为4.4.1
设置环境变量:
#vi /etc/profile 在最后添加如下内容
export PATH=$PATH:/usr/local/arm/4.4.1/bin
终端执行命令使环境变量立即生效:#source /etc/profile
下面所有编译的库都放在目录:/usr/local/arm/4.4.1/arm-none-linux-gnueabi下。这么做的原因是避免在编译其他库时,需要重新指定依赖库的路径,经验告诉我,这样做同时能够消除,依赖库路径所带来的麻烦。
2、安装libtool工具
解压libtool-2.2.4.tar.gz
进入libtool目录
#./configure
#make
#make install
3、libz的交叉编译:
解压zlib-1.2.3
进入libz的目录:
CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/4.4.1/arm-none-linux-gnueabi --shared
#make
#make install
4、libjpeg的交叉编译:
在/usr/local/arm/4.4.1/arm-none-linux-gnueabi目录下新建 man/man1
#mkdir man/man1
解压jpegsrc.v6b
进入jpeg的目录:
将libtool目录里的config.guess和config.sub复制到jpeg目录下
#cp /usr/share/libtool/config/config.sub ./
#cp /usr/share/libtool/config/config.guess ./
#./configure --prefix=/usr/local/arm/4.4.1/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 install
4、libpng的交叉编译
解压libpng-1.2.18
进入png的目录:
#./configure --prefix=/usr/local/arm/4.4.1/arm-none-linux-gnueabi --enable-shared --enable-static --host=arm-linux
#make
#make install
5、yasm的交叉编译:
解压yasm-0.7.2
进入yasm目录:
#./configure --prefix=/usr/local/arm/4.4.1/arm-none-linux-gnueabi --enable-shared --enable-static --host=arm-linux
#make
#make install
6、libxvid的交叉编译:
解压xvidcore-1.3.2
进入build/generic目录:
#./configure --prefix=/usr/local/libxvid --host=arm-linux --disable-assembly
#make
#make install
7、opencv2.0.0的交叉编译:
解压opencv-2.0.0
进入opencv2.0.0目录:
在终端中输入:
#./configure --host=arm-none-linux-gnueabi --without-gtk --without-carbon --without-quicktime --without-1394libs --without-ffmpeg --without-python --without-swig --enable-static --enable-shared --disable-apps CXX=arm-linux-g++ CPPFLAGS=-I/usr/local/arm/4.4.1/arm-none-linux-gnueabi/include/ LDFLAGS=-L/usr/local/arm/4.4.1/arm-none-linux-gnueabi/lib --with-v4l --prefix=/usr/local/arm/4.4.1/arm-none-linux-gnueabi CXXFLAGS=-O2
#make
#make install
到此,opencv-2.0.0的一直算是成功了。接下来,需要把所有的库烧写到arm板子上去,如果烧写到根目录的lib目录下,那么不用指定LD-LIBRARY-PATH,反之则反之。
接下来编译一段测试程序 opencvTest.c 程序的功能是读取源图片处理后生成原图片的轮廓图片
#include<stdio.h>
#include<stdlib.h>
#include"cv.h"
#include"cxcore.h"
#include"highgui.h"
int main(int argc, char** argv )
{
IplImage* in;
if(argc == 3 && (in = cvLoadImage(argv[1], 0))!= 0)
{
printf("load\n");
IplImage* out = cvCreateImage(
cvGetSize(in),
IPL_DEPTH_8U,
1
);
printf("created\n");
cvCanny(in, out, 20 , 60, 3);
printf("down\n");
cvSaveImage(argv[2], out, 0);
return 0;
}
return -1;
}
在pc机上编译此程序
#arm-linux-gcc -I/usr/local/arm/4.4.1/arm-no-linux-gnueabi/include/opencv -I/usr/local/arm/4.4.1/arm-none-linux-gnueabi/include/ -L/usr/local/arm/4.4.1/arm-none-linux-gnueabi/lib -lcv -lcxcore -lhighgui -lpng -lpng12 -ljpeg -lz opencvTest.c -o opencvTest
将程序拷贝到开发板上,同时也拷贝一张图片到开发板上
我的源图片名为frame.jpg 生成的图片名为frame2.jpg
执行程序
#./opencvTest /home/plg/frame.jpg(原图片路径) /home/plg/frame2.jpe(生成图片路径)
ok 如果有轮廓图片生成证明移植成功了