OpenCV 2.0移植过程中zlib,jpeg,png库的交叉编译


宿主系统:Ubuntu 9.04 交叉编译器arm-linux-gcc-4.3.2

目标板:ARM-Cotex(AM3517), Linux系统,kernel:2.6.3.2

第一步,安装交叉编译工具arm-linux-gcc-4.3.2

xgy@ubuntu:~/toolchain$mkdir arm

xgy@ubuntu:~/toolchain$cd arm

xgy@ubuntu:~/toolchain/arm$tar xvf arm-linux-gcc-4.3.2

解压后,在当目录下会多一个usr目录,由于我不喜欢这目录太深,然后就执行如下命令:

xgy@ubuntu:~/toolchain/arm$cp -rv usr/local/* .

xgy@ubuntu:~/toolchain/arm$rm -rf usr

接下来设置环境变量PATH,执行命令如下:

xgy@ubuntu:~/toolchain/arm$cd

xgy@ubuntu:~$vi .bashrc

在.bashrc文件的最后加入:exportPATH=$PATH:/home/xgy/toolchain/arm/4.3.2/bin 保存退出(:wq)

xgy@ubuntu:~$source .bashrc //使刚设置的值生效

到此本来交叉编译工具就已经安装成功了的,可经过检查却发现下图中左列的arm-linux-g++,arm-linux-gcc是4.3.3版本的(用命令arm-linux-gcc  -v 查看),而其它的确是版本的,4.3.2这是一个奇怪现象!

因为我曾试过用4.3.3版本的g++交叉编译opencv2.0总是出错如下:

在这里,我只好创建软链接,使它指向右侧的arm-none-linux-gnueabi-g++,arm-none-linux-gnueabi-gcc。在创建之前先对原来的两个文件做备份。执行命令如下:

在这里再次检查下arm-linux-gcc及arm-linux-g++的版本

命令arm-linux-gcc  –v 输出的最后一行是应该是:gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72)在这里说明下,这个很重要:现在所用的arm-linux-gcc实际上使用的是~./toolchain/arm/4.3.2/bin/目录下的arm-none-linux-gnueabi-gcc,而它的include为arm/4.3.2/arm-none-linux-gnueabi/include,对应的lib为arm/4.3.2/arm-none-linux-gnueabi/lib,也就是说,你如果用arm-linux-gcc编译程译的话,对头文件它缺省的就找arm/4.3.2/arm-none-linux-gnueabi/include,对库它缺省的就找 arm/4.3.2/arm-none-linux-gnueabi/lib,而不是/usr/include /usr/lib,所以如果你要加什么.h  .a  .so文件的话,记着一定要把这些文件加到这两个目录下去,不然这个交叉编译器会告你找不到所要的库或头文件。这里的原理对于其它交叉编译器也适应(主要指目录结构),只是可能目录名不一样。

         OK,到此,交编译器安装成功!

由于opencv2.0依懒于zlib,png、jpeg图形库而我们的arm-linux-gcc 是不带这些库的,它只带了一些基本的库,所以这里我们首先就要交叉编译这些文件,安装到arm/4.3.2/arm-none-linux-gnueabi/include,arm/4.3.2/arm-none-linux-gnueabi/lib目录中。库不一定要最新的,库的版本太新了,opencv有可能不认识。

首先安装zlib库,这个是后面两个库的编译基础。

xgy@ubuntu:~/tmp$  tar  zxvf zlib-1.2.3.tar.gz

在当前目录下会多一个zlib-1.2.3的目录。

由于 zlib 库的configure 脚本不支持交叉编译选项,只好自己手动临时把 gcc 修改成指向我们的交叉编译器 arm-linux-gcc 。执行如下命令:

xgy@ubuntu:~/tmp$ cd  /usr/bin

xgy@ubuntu:/usr/bin$ sudo  –i     //这里得切换到root用户下才能有权限做下面的操作。

[sudo] password for xgy:   //在这里输入xgy用户的密码

root@ubuntu:~# cd  /usr/bin

root@ubuntu:/usr/bin# mv gcc gcc_back

root@ubuntu:/usr/bin#  mv ld ld_back

root@ubuntu:/usr/bin#  ln -sv/home/xgy/toolchain/arm/4.3.2/bin/arm-linux-gcc ./gcc

root@ubuntu:/usr/bin#  ln -sv/home/xgy/toolchain/arm/4.3.2/bin/arm-linux-ld ./ld

下面检查下是否换过来了

root@ubuntu:/usr/bin#gcc –v

gcc version4.3.2 (Sourcery G++ Lite 2008q3-72) //为输出的最后一行

 

root@ubuntu:/usr/bin#ld -v

GNU ld (SourceryG++ Lite 2008q3-72) 2.18.50.20080215

接着切换到原来的目录~/tmp/zlib-1.2.3执行如下命令

root@ubuntu:/usr/bin#su – xgy     //注意这里和用命令 suxgy是有区别的,-表示用xgy的环境

xgy@ubuntu:~$ cdtmp/zlib-1.2.3/

xgy@ubuntu:~/tmp/zlib-1.2.3$./configure --prefix=/home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi/--shared

xgy@ubuntu:~/tmp/zlib-1.2.3$make   (如果以前在这个目录下执行过make ,那要先执行makeclean 然后执行make)

xgy@ubuntu:~/tmp/zlib-1.2.3$make install

然后可以去~/toolchain/arm/4.3.2/arm-none-linux-gnueabi/{include,lib}目录下是否多了一些文件(可以另外再开一个终端查看,这样方便点),如下图:

在这里记着把刚才改过的gcc再改回去,不然后面会出错!!!

 

         接下来安装png库,这个是用来显示png图形的。

xgy@ubuntu:~/tmp$tar  jxvf  libpng-1.2.18.tar.bz2

xgy@ubuntu:~/tmp$cd libpng-1.2.18/

由于libpng不提供有效的configure脚本(可以查看INSTALL文件),所以只好自己动手改Makefile文件了。

xgy@ubuntu:~/tmp/libpng-1.2.18$cp scripts/makefile.linux Makefile

xgy@ubuntu:~/tmp/libpng-1.2.18$vi  Makefile

 

CC=arm-linux-gcc      //修改这里

MKDIR_P=mkdir -p

 

# where "make install" putslibpng12.a, libpng12.so*,

# libpng12/png.h and libpng12/pngconf.h

# Prefix must be a full pathname.

prefix=/home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi

exec_prefix=$(prefix)

 

# Where the zlib library and include filesare located.

#ZLIBLIB=/usr/local/lib

#ZLIBINC=/usr/local/include

ZLIBLIB=/home/xgy/toolchain/arm/4.3.2/arm/arm-none-linux-gnueabi/lib   //修改这里

ZLIBINC=/home/xgy/toolchain/arm/4.3.2/arm/arm-none-linux-gnueabi/include//修改这里

保存退出后执行如下命令:

xgy@ubuntu:~/tmp/libpng-1.2.18$ make

xgy@ubuntu:~/tmp/libpng-1.2.18$ makeinstall

然后可以去~/toolchain/arm/4.3.2/arm-none-linux-gnueabi/{include,lib}目录下是否多了一些文件(可以另外再开一个终端查看,这样方便点),如下图:

 

如果有错,检查下前面的步聚,特别是看zlib有安装有没有出错。

 

接下来安装jpeg库

xgy@ubuntu:~/tmp/libpng-1.2.18$ cd ..

xgy@ubuntu:~/tmp$tar zxvf jpegsrc.v6b.tar.gz

xgy@ubuntu:~/tmp/jpeg-6b$

xgy@ubuntu:~/tmp/jpeg-6b$ ./configure --prefix=/home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi/--host=arm-linux --enable-shared

按此命令进行,然后修 改makefile文件将CC的值改为arm-linux-gcc,一定得改!!

xgy@ubuntu:~/tmp/jpeg-6b$make

安装前需要在 arm-linux 下建个目录,不然安装会出错

xgy@ubuntu:~/tmp/jpeg-6b$mkdir -pv /home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi/man/man1

mkdir: created directory `/home/xgy/toolchain/arm/4.3.2/arm-none-linux-gnueabi/man/man1

xgy@ubuntu:~/tmp/jpeg-6b$ make install

 

然后可以去~/toolchain/arm/4.3.2/arm-none-linux-gnueabi/{include, lib}目录下是否多了一些文件(可以另外再开一个终端查看,这样方便点),如下图:

到此,三个库安装完毕!

相关内容