Chinaunix首页 | 论坛 | 博客
  • 博客访问: 455146
  • 博文数量: 89
  • 博客积分: 1126
  • 博客等级: 少尉
  • 技术积分: 1432
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-11 23:37
文章分类

全部博文(89)

文章存档

2016年(6)

2015年(2)

2014年(1)

2013年(3)

2012年(23)

2011年(54)

分类: 嵌入式

2011-04-20 00:00:00

   最近移植一些第三方开源库,移植中遇到一些问题,写出来和大家分享。解决困难的过程也是学习的过程。下面就是一份总结吧。
需要移植的库:
root@ubuntu:/work/SKIA/3rdparty# ls
3716C_libs    freetype-2.3.4      libpng-1.2.16  libpng-1.2.44   README
curl-7.20.0    giflib-4.1.6           jpeg-8b          libiconv-1.13.1  libpng-1.2.43  libxml2-2.6.30  zlib-1.2.3
其中curl库不需要移植。

在嵌入式开发中经常见到把交叉编译工具链安装到系统目录下:/usr/local/目录下,在这里提供一个参考方法:
文件 如:arm.env
root@ubuntu:/ubuntu/嵌入式Linux应用开发技术大全# cat arm.env 
export PATH=/ubuntu/嵌入式Linux应用开发技术大全/tools/gcc-3.4.5-glibc-2.3.6/bin:$PATH

source arm.env 这样我们就可以把工具链放在任意位置了。
1.首先编译jpeg库,这个库没有费多大劲直接  ./configure
写了一个shell脚本:
  1. root@ubuntu:/work/SKIA/3rdparty/jpeg-8b# cat build3716C.sh -n
  2.      1    #!/bin/bash
  3.      2    #1. use auto-generated Makefile compile jpeg
  4.      3    echo -e "\nStart configure...\n"
  5.      4    sleep 2
  6.      5    ./configure -host=arm-hisiv200-linux --prefix=/work/SKIA/rootfs/usr/
  7.      6    #2. complile
  8.      7    echo -e "\nStart compiling...\n"
  9.      8    sleep 2
  10.      9    make
  11.     10    #3 make install
  12.     11    echo -e "\nStart install...\n"
  13.     12    sleep 2
  14.     13    make install
  15.     14    #4. copy relevant libs to specified directory.
  16.     15    echo -e "\nCopy libs...\n"
  17.     16    cp -d .libs/libjpeg.so* ../3716C_libs
  18.     17
到安装目录看一下:
  1. root@ubuntu:/work/SKIA/rootfs/usr/lib# ls
  2. libjpeg.a libjpeg.la libjpeg.so libjpeg.so.8 libjpeg.so.8.0.2
  3. root@ubuntu:/work/SKIA/rootfs/usr/lib# file libjpeg.so.8.0.2
  4. libjpeg.so.8.0.2: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped
  5. root@ubuntu:/work/SKIA/rootfs/usr/include# ls
  6. jconfig.h jerror.h jmorecfg.h jpeglib.h
  7. root@ubuntu:/work/SKIA/rootfs/usr/bin# ls
  8. cjpeg djpeg jpegtran rdjpgcom wrjpgcom
  9. root@ubuntu:/work/SKIA/rootfs/usr/share/man/man1# ls
  10. cjpeg.1 djpeg.1 jpegtran.1 rdjpgcom.1 wrjpgcom.1
大概过程都是一样的,在gif库中有一个脚本autogen.sh
  1. root@ubuntu:/work/SKIA/3rdparty/giflib-4.1.6# cat autogen.sh -n
  2. 1 #!/bin/sh
  3. 2
  4. 3 # This script runs commands necessary to generate a Makefile for libgif.
  5. 4
  6. 5 echo "Warning: This script will run configure for you -- if you need to pass"
  7. 6 echo " arguments to configure, please give them as arguments to this script."
  8. 7
  9. 8 srcdir=`dirname $0`
  10. 9 test -z "$srcdir" && srcdir=.
  11. 10
  12. 11 THEDIR="`pwd`"
  13. 12 cd $srcdir
  14. 13
  15. 14 aclocal
  16. 15 autoheader
  17. 16 libtoolize --automake
  18. 17 automake --add-missing
  19. 18 autoconf
  20. 19 automake
  21. 20
  22. 21 cd $THEDIR
  23. 22
  24. 23 $srcdir/configure $*
  25. 24
  26. 25 exit 0

这是一个自动产生Makefile的脚本。生成Makefile后,可以使用上边的build.sh脚本来编译。前提是你安装好automake工具。在ubuntu上:apt-get install automake 

z库还有一点不同,它的configure文件不是automak工具生成的,有自己的格式:
root@ubuntu:/work/SKIA/3rdparty/zlib-1.2.3# ./configure --help
usage:
  configure [--shared] [--prefix=PREFIX]  [--exec_prefix=EXPREFIX]
     [--libdir=LIBDIR] [--includedir=INCLUDEDIR]
在写build.sh脚本的时候就按照这个格式写就可以了。
export CC=arm-hisiv200-linux-gcc
#1 ./configure
echo -e "\n Start configure...\n"
sleep 2
./configure  --share --prefix=/work/SKIA/rootfs/usr/
最让人头疼的是png库,生成png文件后,由于png依赖z库,所以要指定libz 库和头文件的位置。
在build.sh中这样指定:
export CFLAGS=-I/work/SKIA/3rdparty/zlib-1.2.3
export LDFLAGS=-L/work/SKIA/3rdparty/zlib-1.2.3
然后make:
但是总是出现下面的错误:
  1. PNG12_0 '{global:' > libpng.vers.new
  2. /bin/bash: PNG12_0:找不到命令
  3. make[1]: *** [libpng.vers] 错误 127
  4. make[1]:正在离开目录 `/work/SKIA/3rdparty/libpng-1.2.16'
  5. make: *** [all] 错误 2
  6. rm -f libpng.vers libpng.vers.new
  7. PNG12_0 '{global:' > libpng.vers.new
  8. /bin/bash: PNG12_0:找不到命令
  9. make: *** [libpng.vers] 错误 127

将 Makefile中 有libpng.vers的全部注掉,呵呵这是google来,是老外出的主意。

阅读(3161) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~