zoukankan      html  css  js  c++  java
  • libjpeg库和libpng库的移植和使用

    目录
    1、libjpeg库移植
    2、zlib库移植
    3、libpng库移植
    4、开源库的使用方法
    1、libjpeg库移植
    【1】下载源码与准备交叉工具链
    libjpegv6下载地址

    【2】解压源码并进入解压后的目录

    【3】配置

    ./configure --prefix=/opt/libdecode --exec-prefix=/opt/libdecode --enable-shared --enable-static -build=i386 -host=arm
    1
    注:/opt/libdecode为自定义的目录,用来存放库生成的各种库和头文件

    【4】修改 Makefile

    CC=gcc 改为 CC=arm-linux-gcc
    AR=ar rc 改为 AR=arm-linux-ar rc
    AR2=ranlib 改为  AR2=arm-linux-ranlib
    1
    2
    3
    【5】确认是否存在/opt/libdecode /include与/opt/libdecode/lib两个目录,若不存在则创建。

    【6】make && make install-lib

    注:移植jpegsrc.v9.tar.gz时,使用以下的配置

    ./configure --prefix=/opt/libdecode --host=arm-none-linux-gnueabi
    1
    【7】库的使用

    安装完成后,可以在 /opt/libdecode/include 目录中找到libjpeg的头文件,以后在编译包含了libjpeg的工程时,必须指定 -I /opt/libdecode/include,同时在链接时需指定 -L /opt/libdecode/lib,若为动态链接,则必须将/opt/libdecode/lib 中的so文件拷贝到运行时环境,且使用export LD_LIBRARY_PATH 将之导出到环境变量。

    2、zlib库移植
    【1】源码下载网址为:zlib1.2.8

    【2】解压并进入目录

    tar -xvf zlib-1.2.8.tar.gz
    1
    【3】导出CC以确定配置时为arm-linux-

    export CC=arm-linux-gcc
    1
    【4】配置zlib库,得到Makefile

    ./configure -shared --prefix=/opt/libdecode
    1
    【5】make && make install

    指定库安装目录为/opt/libdecode,交叉编译后得到的zlib共享库文件放到了/opt/libdecode/lib中,头文件放到了/opt/libdecode/include中,man手册放到了/opt/libdecode/share/man下

    3、libpng库移植
    【1】libpng源码下载libpng1.6.6

    【2】解压并进入目录

    tar -xvf libpng-1.6.6.tar.gz
    1
    【3】配置

    export LDFLAGS="-L/opt/libdecode/lib"
    export CFLAGS="-I/opt/libdecode/include"
    export CPPFLAGS="-I/opt/libdecode/include"
    ./configure --host=arm-linux --enable-shared --enable-static --prefix=/opt/libdecode
    1
    2
    3
    4
    【4】make && make install

    【5】如果在进行配置前并未按照2中所述安装zlib,则配置运行了一部分后,会报错:

    configure: error: zlib not installed
    1
    错误提示zlib库未安装,原因是libpng库依赖于zlib库。因此在编译libpng前必须先安装zlib(注意安装的是交叉编译的zlib,而不是给x86平台下使用的zlib)。

    【6】指定库安装目录为/opt/libdecode,交叉编译后得到的libpng共享库文件放到了/opt/libdecode/lib中,头文件放到了/opt/libdecode/include中,man手册放到了/opt/libdecode/share/man下

    【7】头文件拷贝
    进入/opt/libdecode/include中可以看到,默认安装时已经拷贝了png.h pnglibconf.h pngconf.h三个头文件。但是实际做png解码显示图片时发现,只有上述三个头文件(实际上只有png.h有用到)是不够的,还需要另外两个头文件pngstruct.h和pnginfo.h。
    在libpng源码目录下执行以下两条指令,将两个头文件人为拷贝过去以备使用即可。

    cp pnginfo.h /opt/libdecode/include/
    cp pngstruct.h /opt/libdecode/include/
    1
    2
    4、开源库的使用方法
    【1】移植
    (源码下载、解压、配置、修改Makefile、编译或交叉编译)。移植的目的是由源码得到三个东西:动态库.so,静态库.a,头文件.h

    【2】部署动态库以使程序运行起来

    第一种情况:放到/lib或者/usr/lib下,这样不需要给系统指定库路径,就能自动找到。
    第二种情况:有时候对于一些不常用的库,我们不愿意将他放到lib或usr/lib目录下去,而是找个自定义的第三方的目录,单独将这些不常用的库放置,然后再用一定方法告诉操作系统去到这个路径下加载这个库。将该自定义第三方目录导出到环境变量LD_LIBRARY_PATH下即可。
    【3】部署动态链接库一般有三个位置可以考虑:

    第一个:/lib 如:cp /opt/libdecode/lib/*so* /x210_porting/rootfs/rootfs/lib
    第二个:/usr/lib 如:cp /opt/libdecode/lib/*so* /x210_porting/rootfs/rootfs/usr/lib
    第三个:任意指定目录如/opt/mylib,其做法如下
    cd /x210_porting/rootfs/rootfs/opt/mylib
    cp /opt/libdecode/lib/*so* ./
    1
    2
    在开发板端export LD_LIBRARY_PATH=/opt/mylib:$LD_LIBRARY_PATH
    echo $LD_LIBRARY_PATH
    看见/opt/mylib: 即可
    1
    2
    3
    (注:我们制作的开发板在Ubuntu挂载的文件系统我的路为:/x210_porting/rootfs/rootfs/)

    【4】使用(部署动态库so、部署静态库.a和头文件.h)

    动态库是运行时环境需要的,编译程序时不需要。
    静态库是静态连接时才需要,动态链接时不需要。
    头文件.h是在编译程序时使用的,运行时不需要的。
    所以动态库so文件是要放到开发板的文件系统中去的(放的过程就叫部署),把静态库.a文件和头文件.h文件放到ubuntu的文件系统中去。
    【5】注意三个编译链接选项:-I(大i) -l(小L) -L

    -I(大i)是编译选项(准确的是说是预处理选项CFLAGS或者CPPFLAGS中指定),用来指定预处理时查找头文件的范围的。
    -l(小L)是链接选项(LDFLAGS中指定),用来指定链接额外的库(譬如我们用到了数学函数,就用-lm,链接器就会去链接libm.so;那么我们使用了libjpeg,对应的库名字就叫libjpeg.so,就需要用-ljpeg选项去链接)
    -L是链接选项(LDFLAGS中指定),用来告诉链接器到哪个路径下面去找动态链接库。

  • 相关阅读:
    Metrics.NET
    DotNet Multithread
    WebApi框架概述
    RESTful API 概述
    MvcPager分页控件以适用Bootstrap效果
    Windows集群网络负载均衡
    学习Oracle日记(10)-数据类型
    在Eclipse中使用Junit4进行单元测试
    Android--学习笔记--02--AndroidStudio的设置
    Android--学习笔记--01--开发软件安装
  • 原文地址:https://www.cnblogs.com/klausage/p/14763638.html
Copyright © 2011-2022 走看看