ARM平台移植jpeg z png 库

来源:互联网 发布:诈骗淘宝店铺 编辑:程序博客网 时间:2024/06/13 13:25
   最近移植一些第三方开源库,移植中遇到一些问题,写出来和大家分享。解决困难的过程也是学习的过程。下面就是一份总结吧。
需要移植的库:
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. 5echo "Warning: This script will run configure for you -- if you need to pass"
  7. 6echo " arguments to configure, please give them as arguments to this script."
  8. 7
  9. 8srcdir=`dirname $0`
  10. 9test -z "$srcdir" && srcdir=.
  11. 10
  12. 11THEDIR="`pwd`"
  13. 12cd $srcdir
  14. 13
  15. 14aclocal
  16. 15autoheader
  17. 16libtoolize --automake
  18. 17automake --add-missing
  19. 18autoconf
  20. 19automake
  21. 20
  22. 21cd $THEDIR
  23. 22
  24. 23$srcdir/configure $*
  25. 24
  26. 25exit 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来,是老外出的主意。

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1704) | 评论(0) | 转发(1) |
0

上一篇:在嵌入式中使用gdbserver

下一篇:shell脚本编程

相关热门文章
  • SHTML是什么_SSI有什么用...
  • 卡尔曼滤波的原理说明...
  • shell中字符串操作
  • 关于java中的“错误:找不到或...
  • linux设备驱动归纳总结...
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
原创粉丝点击