CMake构建学习笔记4-libjpeg库的构建

news2024/12/24 19:59:43

libjpeg是一个广泛使用的开源库,用于处理JPEG(Joint Photographic Experts Group)图像格式的编码、解码、压缩和解压缩功能,是许多图像处理软件和库的基础。

libjpeg本身的构建没什么特别的,不过值得说道的是libjpeg存在一个高性能分支叫做libjpeg-turbo,通过汇编代码使用SIMD(Single Instruction, Multiple Data)指令集(如 MMX、SSE2、AVX2 等),可以显著加快JPEG图像的压缩和解压缩速度。据说在同样的硬件环境下,libjpeg-turbo的速度通常是libjpeg的2到6倍。

libjpeg的一个经典版本是v6b,libjpeg-turbo对这个版本保持了API兼容性,因此可以作为libjpeg的直接替代品,而无需对现有代码进行修改。libjpeg-turbo对于v7,v8只是做到了部分兼容,但是其实libjpeg目前已经发展到v9了。笔者个人认为libjpeg和libjpeg-turbo是C语言实现的,接口比较稳定,这个兼容性还是可以保证的。另外,jpeg的格式也固定很久了改动也不太大,估计也不上版本太高的功能,因此还是决定使用libjpeg-turbo。

构建libjpeg-turbo的关键指令如下所示:

# 配置CMake  
cmake .. -G "$Generator" -A x64 -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="$InstallDir" -DENABLE_STATIC=off

# 构建阶段,指定构建类型
cmake --build . --config RelWithDebInfo

# 安装阶段,指定构建类型和安装目标
cmake --build . --config RelWithDebInfo --target install

除了ENABLE_STATIC是libjpeg-turbo自定义的构建选项,其他指令和构建选项本系列其他几篇博文都介绍过。不过有一点需要提示一下,libjpeg-turbo编译用到了汇编语言,因此需要指定一个汇编语言编译器NASM,只要是安装在默认目录就能够自动识别:

CMake变量和项目配置

当然,不需要NASM也能构建成功,不过libjpeg-turbo就不能得到最佳的性能优化了。

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

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

相关文章

『功能项目』摄像机跟随角色【07】

我们打开上一篇06新输入系统项目, 本章要做的事情是摄像机跟随主角移动, 给主角增加一个Player标签方便主摄像机查找主角对象 在编辑场景调好角度,选择Main Camera对象按键盘Ctrl Shift F使运行场景与编辑场景相同 新建CameraCtrl脚本代码 …

Linux_NAT网络原理图,网络配置指令

目录 linux网络配置原理图 查看网络IP和网关 查看虚拟网络编辑器和修改IP地址 查看网关 ping测试主机之间网络连通性 linux网络配置原理图 ping指令的意思是连通上网,可以检测是否这个地址是否通。 比如我们在虚拟机里可以在火狐浏览器上打开百度。 使用ifco…

框架——动态SQL

目录 1.Mybatis动态SQL 2.MyBatis 中用于实现动态 SQL 的元素 3.查所有 4.If 元素 5.trim 元素 6.Choose 元素 7.set 元素 8.foreach 元素 根据传入id删除学生信息 根据传入列名查询学生相关信息 1.Mybatis动态SQL MyBatis 的一个强大的特性之一通常是它的动态 SQL 能…

CSRF简单介绍

欢迎交流 CSRF 条件: 需要请求伪造数据包无过滤防护,有过滤防护能绕过受害者需要触发(诱惑) 流程图 解决方案一: 检查Referer字段 解决方案二: CSRFToken 发货100CMS示例(无过滤&#xff…

数据仓库系列4-什么是维度建模,它与关系型建模有什么区别

想象一下,你正在分析一家大型零售连锁店的销售数据。突然,你意识到传统的数据库模型无法有效地回答"去年黑色星期五当天,哪个地区的哪类产品销售额最高?"这样的复杂问题。这就是维度建模发挥作用的时候了 目录 引言:维度建模的魔力什么是维度建模?维度建模的定义维…

在我的博士科研生活中,SCI的英语写作一直是我的挑战。

在我的博士科研生活中,SCI的英语写作一直是我的挑战。尽管我不断地努力提高自己的语言水平,但每当我提交文章后,审稿人或编辑总是会指出语言表达的不足之处,让我深感苦恼。于是,我开始寻找专业的润色服务来帮助我提升文…

大模型之二十六-Diffusion model实例浅析

在2022年,midjourney、DALL-E以及Stable Diffusion三个文生图模型引爆了机器生产文生图领域,他们的模型能够在可控条件(标签、文本描述)下生成高分辨率、细节丰富的多样性图像,这在视觉上往往难以与真实图像区分。配套…

其它特殊库存

自有特殊库存 对于特殊库存,我们通常认为是由于所有权或存储地点与其它库存分开管理的物料库存。当过帐涉及特殊库存的货物移动时,除了移动类型外,必须(如向特定供应商或客户或销售订单)提供相关特殊库存标识以及更多…

3秒内搞定服务器端口扫描!用RustScan快速查看开放端口

文章目录 3秒内搞定服务器端口扫描!用RustScan快速查看开放端口1. RustScan简介2. RustScan特点3. RustScan的基本使用3.1 创建alias别名3.2 基本用法3.3 常用参数说明3.4 示例4. 注意事项 最近开始公众号文章也开始同步更新了,对Java、大数据、人工智能…

游戏开发设计模式之命令模式

目录 命令模式的定义和工作原理 应用场景 实现方式 优点 缺点 结论 命令模式在游戏开发中的具体实现案例是什么? 如何在Unity3D中有效地实现和管理命令模式以提高游戏性能? 命令模式与其他设计模式(如观察者模式、状态模式&#xff…

【C++ 面试 - 内存管理】每日 3 题(一)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…

JavaScript解构介绍

​在JavaScript中,解构赋值(Destructuring Assignment)是一种方便的语法,用于从数组或对象中提取值并将其赋给变量。解构使得代码更简洁、可读性更高,同时减少了重复的代码。 1. 数组解构 数组解构允许我们从数组中提…

2024最新、最热、最全Java容器【知识点】!!!

文章目录 Java容器种类详细说说他们都有哪些内容Collection :存储对象的集合 为什么HashSet和ArrayDeque不支持有序性操作Map:存储键值对的映射表 ArrayList和LinkedList的区别?ArrayList的增删一定比LinkedList的增删慢吗?native()方法是什么…

SOMEIP_ETS_064: String_UTF16FIXED_too_short

测试目的: 验证当设备(DUT)接收到一个小于64字节的UTF16FIXED字符串时,是否能够返回错误消息。 描述 本测试用例旨在检查DUT在接收到一个长度小于64字节的UTF16FIXED字符串的SOME/IP消息时,是否能够返回格式错误&am…

04-javascript 高阶(知识点)

目录 1.严格模式 1.1什么是严格模式 1.2开启严格模式 1.3严格模式中的变化 2.高阶函数 3.闭包 3.1 变量的作用域 3.2 什么是闭包 3.3 闭包的作用 3.4 闭包的案例 4.递归 4.1 什么是递归 4.2 利用递归求1~n的阶乘 5.赋值(地址传递)-浅拷贝-深拷贝 5.1 地址传递 5…

MATLAB中bicgstabl函数用法

目录 语法 说明 示例 线性系统的迭代解 使用指定了预条件子的 bicgstabl 提供初始估计值 使用函数句柄代替数值矩阵 bicgstabl函数的功能是求解线性系统 - 稳定双共轭梯度 (l) 法。 语法 x bicgstabl(A,b) x bicgstabl(A,b,tol) x bicgstabl(A,b,tol,maxit) x bic…

map容器的所有操作

1.基本概念 2.构造和赋值 注意map中存放的是pair对组&#xff0c;<key,value>&#xff0c;会根据key自动排序 3.大小和交换 4.插入和删除 插入的四种方式&#xff1a; 5.查找和统计 6.排序

8.21-部署eleme项目

1.设置主从从mysql57服务器 &#xff08;1&#xff09;配置主数据库 [rootmsater_5 ~]# systemctl stop firewalld[rootmsater_5 ~]# setenforce 0[rootmsater_5 ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.serv…

# 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群

利刃出鞘_Tomcat 核心原理解析&#xff08;八&#xff09;-- Tomcat 集群 一、Tomcat专题 - Tomcat集群 - 介绍及准备工作 1、Tomcat集群 简介 由于单台Tomcat的承载能力是有限的&#xff0c;当我们的业务系统用户量比较大&#xff0c;请求压力比较大时&#xff0c;单台Tomc…

i.MX6裸机开发(8):中断

相比STM32的NVIC&#xff0c;i.MX 6ULL的中断控制系统更复杂&#xff0c;它的中断管理器使用的是GIC V2&#xff0c;GIC V2的实现方式与我们熟知的NVIC差别较大。 本章重点讲解i.MX 6U的GIC基本结构以及实现方法&#xff0c;更详细的介绍可以参考《ARM Generic Interrupt Contr…