首页 > 其他分享 >CMake构建学习笔记4-libjpeg库的构建

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

时间:2024-08-25 10:37:18浏览次数:7  
标签:RelWithDebInfo turbo CMake libjpeg -- 构建

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的一个经典版本是v6blibjpeg-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就不能得到最佳的性能优化了。

标签:RelWithDebInfo,turbo,CMake,libjpeg,--,构建
From: https://www.cnblogs.com/charlee44/p/18378708

相关文章

  • CMake 保姆级教程
    1.CMake概述        CMake是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile,通过make命令进行项目的构建,大多是IDE软件都集成了make,比如:VS的nmake、linux下的GNUmake、Qt的qmake等,如果自己动手写makefile,会发现,makefile通常依赖......
  • JavaScript 构建一个简单的待办事项应用
    包含添加、删除、标记任务功能。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>TodoList&......
  • 在Python虚拟环境中利用PyInstaller高效构建可执行EXE文件的专业指南
    使用虚拟环境(如venv或conda)来打包Python程序为exe文件是一个很好的实践,因为它可以确保应用程序在不同的环境中具有一致性和可移植性。然而,需要注意的是,虚拟环境本身并不直接提供将Python程序打包成exe文件的功能。这通常需要使用专门的打包工具,如PyInstaller、cx_Freeze或py......
  • WebRTC 实时通信:构建高效网页视频通话的秘诀
    标题:WebRTC实时通信:构建高效网页视频通话的秘诀WebRTC(WebReal-TimeCommunications),即网页实时通信技术,是一种支持浏览器间无需额外插件即可实现音视频实时通信的API。本文将深入探讨WebRTC的基本概念、关键技术,并通过示例代码展示如何在网页中实现实时视频通话功能,让您快......
  • Ruby Web服务开发:构建高效RESTful API的秘诀
    标题:RubyWeb服务开发:构建高效RESTfulAPI的秘诀Ruby作为一种灵活、高效的编程语言,通过其丰富的库和框架,为开发Web服务提供了强大的支持。本文将深入探讨如何在Ruby中开发Web服务,特别是RESTfulAPI。我们将从基础概念讲起,逐步深入到框架选择、路由配置、控制器编写、模型设......
  • 使用 LangGraph 构建工作流, 实现与虚拟女友对话
    文章目录简介背景流程图代码实现简介介绍了如何使用LangGraph搭建一个基于聊天机器人的工作流,具体实现了一个虚拟女友的角色扮演游戏。通过流程图展示了构建完成的状态图,并介绍了各个节点的功能,如接收用户输入、生成对话等。提供了是否使用历史聊天记录的方法,让......
  • 构建Spring Boot应用的微服务服务容错机制
    构建SpringBoot应用的微服务服务容错机制大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!微服务架构中的容错性在微服务架构中,服务之间的依赖关系复杂,任何一个服务的故障都可能影响到整个系统的稳定性。因此,构建一个具有容错能力的微服务系统至关重......
  • 构建Spring Boot应用的微服务服务动态路由
    构建SpringBoot应用的微服务服务动态路由大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!微服务架构中的动态路由需求在微服务架构中,服务实例可能会频繁地上下线,这就需要一种机制来动态地管理和路由请求到正确的服务实例。动态路由能够提高系统的可......
  • Ros2 Moveit2 编译安装报错解决方案 - By not providing "Findgz_sim_vendor.cmake" i
    moveit_resources---stderr:gz_ros2_controlCMakeErroratCMakeLists.txt:27(find_package):Bynotproviding"Findgz_sim_vendor.cmake"inCMAKE_MODULE_PATHthisprojecthasaskedCMaketofindapackageconfigurationfileprovidedby"gz......
  • SpringBoot文档之构建包的阅读笔记
    PackagingSpringBootApplicationsEfficientDeploymentsEfficientDeployments默认情况下,基于SpringBoot框架开发应用时,构建插件spring-boot-maven-plugin将项目打包为fatjar。执行如下命令,解压构建得到的jar文件。java-Djarmode=tools-jarmy-app.jarextract......