第三方库介绍——libpng

news2024/12/29 11:37:24

文章目录

  • 概述
  • 库版本的选择与下载
  • 安装zlib和libpng
  • 交叉编译
    • 交叉编译zlib库
    • 交叉编译libpng库
  • libpng的使用

概述

libpng是一款C语言编写的比较底层的读写PNG文件的跨平台的库。由于依赖于zlib库,所以在安装libpng时往往还需要安装zlib库。

库版本的选择与下载

zlib库和libpng库的下载地址:https://jaist.dl.sourceforge.net/project/libpng/

libpng库下载的版本为:libpng-1.6.37
zlib库下载的版本为:zlib-1.2.11

安装zlib和libpng

由于某些系统可能自带或者在安装其他应用时就装上了zlib,为了避免安装的libpng与系统本身自带的zlib(安装在系统的路径为:/usr/local/lib)有冲突,所以创建一个文件夹用于安装libpng与zlib。

首先将两个压缩包放在同一个路径下

目录结构如图所示:

在这里插入图片描述

安装zlib库

tar -zxvf zlib-1.2.11.tar.gz && cd zlib-1.2.11
./configure --prefix=$PWD/install
make 
sudo make install
make clean

安装libpng库

tar -xzvf libpng-1.6.37.tar.gz && cd libpng-1.6.37
./configure --prefix=$PWD/install --with-zlib-prefix=$PWD/../zlib-1.2.11/install
make 
sudo make install
make clean

在./configure之后会根据当前环境与配置参数自动生成对应的Makefile.in和Makefile。

交叉编译

linux主机:ubuntu-18.04

交叉编译器:arm-buildroot-linux-gnueabihf

开发板kernel:Linux 5.4.0-150-generic x86_64

开发板:100ASK_STM32MP157_PRO开发板

libpng 依赖于 zlib 库, 所以要想移植 libpng 先得移植 zlib 库才可以。

交叉编译zlib库

zlib编译的过程比较简单,./configure不允许传入非指定参数;所以这里通过 $ export CC=xxx 进行配置交叉编译工具

book@100ask:~/Desktop/libpng/zlib-1.2.11$ ./configure -help
usage:
  configure [--const] [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]
    [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]
    [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]

依次执行下面的指令:

tar -zxvf zlib-1.2.11.tar.gz && cd zlib-1.2.11
export CC=/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc
./configure --prefix=$PWD/install
make 
sudo make install
make clean

进入到 zlib 安装目录下,将 lib 目录下的所有动态链接库文件拷贝到开发板 Linux 系统/usr/lib 目录
在这里插入图片描述

若原开发板中有该库文件,需要先将出厂系统中原有的 zlib 库文件删除, 在开发板 Linux 系统下执行命令:rm -rf /usr/lib/libz.* /lib/libz.*

交叉编译libpng库

依次输入指令:

tar -xzvf libpng-1.6.37.tar.gz && cd libpng-1.6.37
./configure --prefix=$PWD/install --host=arm-buildroot-linux-gnueabihf CC=/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc CPPFLAGS="${CPPFLAGS} -I/home/book/Desktop/libpng/zlib-1.2.11/install/include" LDFLAGS="${LDFLAGS} -L/home/book/Desktop/libpng/zlib-1.2.11/install/lib" 
make
sudo make install
make clean
  • –prefix:指定安装目录
  • –host:指定目标主机类型
  • CC:指定交叉编译工具
  • –enable-shared:编译生成.so动态库
  • –enable-static:编译生成.a静态库
  • LDFLAGS:指定链接库目录。不一定需要,看编译具体情况
  • CPPFLAGS:指定头文件目录。不一定需要,看编译具体情况

移植到开发板:进入到 libpng 安装目录,将 bin 目录下的所有测试工具拷贝到开发板 Linux 系统/usr/bin 目录;将 lib 目录下的所有库文件拷贝到 Linux 系统/usr/lib 目录。

libpng的使用

libpng使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

积分等式与积分不等式

参考资料: B站 - 考研数学-积分不等式(所有方法全归纳)张宇基础和强化及习题册 积分等式 中值定理夹逼准则积分法 在这个专题中,有如下经验: 遇到 f ( x ) f(x) f(x)连续,应当想到变限积分 ∫ a x f ( t…

【软考网络管理员】2023年软考网管初级常见知识考点(6)- 虚拟局域网技术

涉及知识点 什么是虚拟局域网VLAN?VLAN的分类有哪些,IEEE802.1Q,VLAN的端口类型,VLAN信息的传递,软考网络管理员常考知识点,软考网络管理员网络安全,网络管理员考点汇总。 文章目录 涉及知识点…

单臂路由(RIP协议原理)

一、前言 1.1 本文为单臂路由(RIP协议原理)笔记 (供新手参考) 通过RIP协议,交换机、单臂路由的工作原理和配置方法。 1.2 思科路由器设置ip设置 在将设备摆放完毕后,需要配置每台设备的IP,有如下三种基…

深入理解Java中的Lock和AQS

文章目录 前言正文一、Lock接口的定义二、ReentrantLock 的实现三、AbstractQueuedSynchronizer的实现3.1 AQS 中的加锁底层3.2 ReentrantLock中的 Sync 同步器3.3 NonfairSync 的实现3.4 FairSync 的实现3.5 公平锁和非公平锁的总结3.5.1 公平锁3.5.2 非公平锁 3.6 释放锁 前言…

突破边界:高性能计算引领LLM驶向通用人工智能AGI的创新纪元

AGI | AIGC | 大模型训练 | GH200 LLM | LLMs | 大语言模型 | MI300 ChatGPT的成功带动整个AIGC产业的发展,尤其是LLM(大型语言模型,大语言模型)、NLP、高性能计算和深度学习等领域。LLM的发展将为全球和中国AI芯片、AI服务器市场…

什么样的产品更适合做海外网红营销?

随着社交媒体和全球化的兴起,海外网红营销成为了一种非常受欢迎的推广方式。然而,并非所有产品都能够在海外市场成功借助网红营销实现推广目标。本文Nox聚星将和大家详细探讨什么样的产品更适合在海外进行网红营销,并提供相关的策略建议。 一…

汽车智能化进入赛点:城市NOA落地竞速,战至最后一公里

城市NOA的竞争正在加速进入落地阶段,6月即将结束,理想汽车计划在剩余几天内,在北京和上海开启城市辅助智能驾驶功能内测,并在下半年推出通勤智能驾驶功能。 其应用方法是,车主可用在日常使用中,基于智能化…

Linux系统编程(多进程编程深入1)

文章目录 前言一、进程参数和环境变量的意义二、子进程程序结束返回值到哪里去了?三、进程退出函数四、实际使用案例五、僵尸进程总结 前言 本篇文章我们深入的讲解多进程编程。 一、进程参数和环境变量的意义 进程参数和环境变量是两种不同的机制,但…

SuperMap GIS基础产品桌面GIS FAQ集锦(3)

SuperMap GIS基础产品桌面GIS FAQ集锦(3) 【iDesktop】如何获取倾斜摄影的边界线? 【解决办法】1、将倾斜摄影添加到球面场景,使用【三维分析】-【生成DSM】获取栅格数据集 2、使用【代数运算】功能,将大于0的栅格值统…

我做了10年的测试,由衷的建议年轻人别入这行了

两天前,有个做功能测试7年的同事被裁员了。这位老哥已经做到了团队中的骨干了,人又踏实,结果没想到刚刚踏入互联网“老龄化”大关,就被公司给无情优化了。 现在他想找同类型的工作,薪资也一直被压,考虑转行…

java(SpringBoot)中操作Redis的两种方式

前言 之前我们介绍过了redis的五中基本类型以及在可视化界面进行操作,那么在开发中(在代码中)我们通常使用,jedis进行操作redis,要是springboot 项目,我们通常使用redisTemplte进行操作 首先将redis启动 方式一 Jred…

smart Java——Netty实战(上):select/poll/epoll、NIOReactor模型

文章目录 1.多路复用——select、poll、epoll底层原理2.NIOReactor模型(1)单Reactor单线程模型(2)单Reactor多线程模型(3)主从Reactor多线程模型(Netty) 3.Netty核心组件&#xff08…

备战金九银十,互联网大厂1000道java高频面试知识点(附答案,赶紧收藏)

Java 面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。现如今,Java 面试的本质就是八股文,把八股文面试题背好,面试才有可能表现好。…

卷积实现—im2col+gemm

普通卷积 看卷积的实现,先看其普通的计算方式:滑窗计算和其计算shape大小的公式,以及各个卷积特性对其计算的影响,比如:stride,group,dilation,pad等。 H o u t ( H i n − k h p …

OpenGL 帧缓冲

1.简介 我们已经使用了很多屏幕缓冲了:用于写入颜色值的颜色缓冲、用于写入深度信息的深度缓冲和允许我们根据一些条件丢弃特定片段的模板缓冲。这些缓冲结合起来叫做帧缓冲(Framebuffer),它被储存在内存中。OpenGL允许我们定义我们自己的帧缓冲&#x…

Fiddler不仅可以抓包,还可以做接口测试喔

前言 Fiddler最大的优势在于抓包,我们大部分使用的功能也在抓包的功能上,Fiddler做接口测试也是非常方便的。对应没有接口测试文档的时候,可以直接抓完包后,copy请求参数,修改下就可以了。 Composer简介 点开右侧Co…

模拟电路系列分享-晶体管的四种状态

目录 概要 整体架构流程 技术名词解释 1.截止状态 2.放大状态 3.饱和状态 4.倒置状态 技术细节 小结 概要 提示:这里可以添加技术概要 晶体管有4种工作状态,分别是截止、放大、饱和,以及倒置。 整体架构流程 提示:这里可以添加…

黑马程序员前端 Vue3 小兔鲜电商项目——(九)购物车

文章目录 本地购物车添加购物车头部购物车模板代码渲染数据 删除功能实现购物车统计信息列表购物车-基础内容渲染模版代码路由配置渲染列表 列表购物车-单选功能实现列表购物车-全选功能实现列表购物车-统计数据功能实现 接口购物车加入购物车删除购物车 退出登录-清空购物车购…

Matplotlib - 绘制 带有对角线的散点图 (Diagonal Scatter Plots) 函数源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131384440 Matplotlib 是一个用于绘制二维图形的 Python 库,提供了一个 pyplot 模块,用于创建各种类型的图表。其…

实战经验---好用的Midjourney提示词

说明:本文基于Midjourney(下称MJ)官方说明书整理,分2篇文章发布,这是第1篇。内容主要包括绘画指令(Prompt)、提示、参数、设置、模型选择等。 由于是整理文本,过程中个别地方为了显…