目录

  • 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

注:/opt/libdecode为自定义的目录,用来存放库生成的各种库和头文件

【4】修改 Makefile

 CC=gcc         改为  CC=arm-linux-gccAR=ar rc  改为  AR=arm-linux-ar rcAR2=ranlib  改为  AR2=arm-linux-ranlib

【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

【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

【3】导出CC以确定配置时为arm-linux-

export CC=arm-linux-gcc

【4】配置zlib库,得到Makefile

 ./configure -shared --prefix=/opt/libdecode

【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

【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

【4】make && make install

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

configure: error: zlib not installed

错误提示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/


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* ./
在开发板端export LD_LIBRARY_PATH=/opt/mylib:$LD_LIBRARY_PATH
echo $LD_LIBRARY_PATH
看见/opt/mylib: 即可

(注:我们制作的开发板在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中指定),用来告诉链接器到哪个路径下面去找动态链接库。

libjpeg库和libpng库的移植和使用相关推荐

  1. libpng库的使用讲解

    由于个人想学习DirectFB的使用.而 DirectFB依赖于libpng和libjpeg库,所以需要简单了解下libpng库的使用方法.本文转自:http://www.cnblogs.com/xi ...

  2. STM32 HAL库详解 及 手动移植

    源: STM32 HAL库详解 及 手动移植

  3. ffmpeg-0.6.3开源编码解码库,从linux下移植到windows vs2005,全部开源。

    ffmpeg-0.6.3开源编码解码库,从linux下移植到windows vs2005,全部开源. 需要 Intel C++ Compile 和 开源的SDL库支持,由于 Intel C++ Com ...

  4. GD32F303固件库开发(16)----移植兆易创新SPI Nor Flash之GD25Q64Flash

    spi概述 SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的 ...

  5. DSP视频教程第2期:系统介绍ARM DSP数字信号处理库以及超简单的移植方法分享(2022-01-27)

    视频教程汇总帖:[学以致用,授人以渔]2022视频教程汇总贴,持续更新中,DSP更新到第4期,ThreadX更新到第3期,BSP驱动更新到第9期(2022-03-17) - STM32F429 - 硬 ...

  6. STM32之HAL库详解 及 手动移植

    转载出处:http://blog.csdn.net/zcshoucsdn/article/details/55213616 HAL库结构   说到STM32的HAL库,就不得不提STM32CubeMX ...

  7. STM32 之二 HAL库详解 及 手动移植

    2018.1.19 更新其中的错误部分 HAL库结构   说到 STM32 的 HAL 库,就不得不提 STM32CubeMX,其作为一个可视化的配置工具,对于开发者来说,确实大大节省了开发时间.ST ...

  8. linux上安装libpng库以及zlib库

    hello ,大家好,我是jordy,一只空着的杯子:欢迎各位朋友光临我的博客,多多沟通 ,我的QQ :   1760282809 363232564 http://blog.csdn.net/baw ...

  9. OpenCV3.X 编译 ——libpng库问题相关解决方法

    OpenCV3.X 编译 --libpng库相关问题解决方法 简介 在ubuntu16.04 编译的, Opencv版本 OpenCV3.0 OpenCV3.2 原本电脑自带 libpng1.2.0, ...

最新文章

  1. WebForm开发常用代码
  2. VBS基础篇 - 运算符(1) - 运算符优先级
  3. 如何解决SSL/TLS握手过程中失败的错误?
  4. mybatis关联配置(一对多配置)
  5. 如何使用Java 8函数式编程生成字母序列
  6. MotifStack:多motif序列比较和可视化
  7. linux内核start_kernel分析
  8. vs Obsolete标识符
  9. C++实现演讲比赛小项目
  10. 【Java】 剑指offer(65) 不用加减乘除做加法
  11. mac excel 函数
  12. 关于SI4463使用的个人总结
  13. 井字棋游戏 Matlab
  14. 回文子串、回文子序列相关题目
  15. Java程序CPU飙升排查,找出死循环代码
  16. 采集HTTP与HTTPS
  17. 2021年美亚杯资格赛解析
  18. Zynq-Linux移植学习笔记
  19. 面试题:为什么索引要使用B+树而不使用其他索引?以及B+树为什么更矮胖
  20. 中国膜产业需求规模与投资潜力分析报告2022版

热门文章

  1. 支付宝电脑网站版支付
  2. 入木三分学网络第一篇--VRRP协议详解-----(2)
  3. C++UML类图的关系
  4. 为什么有些人钱花了而赚不到钱呢?
  5. Web在线客服系统源码
  6. oracle log_archive_dest_1 未指定导致flash_recovery_area引发数据库挂起
  7. Android studio 解决运行按钮灰色/禁用状态
  8. GitHub 标星 1000+ 的开源电子书
  9. NOMS管和PMOS管的区别
  10. 菜鸟学Java——简单验证码生成(Java版)