7z系列之一:7zip SDK中C++模块的编译

简介:

最近想使用7zip压缩,就研究了下7zip的SDK,将过程留下,分享与大家。这是本篇系列的第一篇,主要内容就是编译。

 

7zip

 

严格来说,7zip这个词是有问题的,因为官方使用了不同的词来表达恰当的含义,如下图所示:

image

因为这次研究的主要目的就是在C++中解压缩7z格式文件,为了方便下文就称为7zip。

 

SDK

 

下载地址:http://www.7-zip.org/sdk.html

目前版本:9.20  (2010-11-18 更新)

文件名:lzma918.tar.bz2

大小:500KB

 

7zip SDK中的C++模块

7zip中提供了多种语言支持, 平常使用多的是C的源代码和C++版本编译后基于COM的7z.dll.这个DLL文件并不是直接编译出来的,而是SDK中某个编译后的DLL文件改名而来。SDK中文件说明在lzma.txt中,大家可以阅读一下加深了解。

 

将下载的lzma918.tar.bz2解压后,结构如下:

image

 

C++相关的文件都在CPP目录中,编译相关的文件位置如下:

7zipSDK\CPP\7zip\Bundles\

 

几个目录功能如下:

Alone7z 编译后是7z.exe, 只支持7z/LZMA/BCJ/BCJ2算法
Format7zExtractR 编译后是7zxr.dll, 提供7z/LZMA/BCJ/BCJ2的解压缩
Format7zR 编译后是7zr.dll, 提供7z/LZMA/BCJ/BCJ2的压缩和解压缩
LzmaCon 编译后是lzma.exe, 只提供LZMA的压缩和解压缩

 

编译7zxr.dll

几个目录下模块编译过程差不多,这里以编译7zxr.dll为例。7zip SDK中CPP模块并没有提供VS对应的VCProj或者Sln文件,而是使用的make文件,因此需要在命令行下使用nmake来编译。

在不同版本的VS中,提供了不同版本的nmake文件,因此编译前需要调用对应的VS参数设置命令来设置,以装在C盘Program Files下的VS2005为例:

执行:

"c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"

然后进入对应的7zipCPP模块目录中,执行nmake指令:

nmake

参考如下图:

image

 

编译后的文件在O目录中,文件名为7zxr.dll

image

目录
相关文章
|
4月前
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
60 13
|
3月前
|
消息中间件 Java C语言
消息队列 MQ使用问题之在使用C++客户端和GBase的ESQL进行编译时出现core dump,该怎么办
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
3月前
|
NoSQL API Redis
c++开发redis module问题之为什么在使用RedisModule_GetApi之前要通过((void**)ctx)[0]这种方式获取其地址
c++开发redis module问题之为什么在使用RedisModule_GetApi之前要通过((void**)ctx)[0]这种方式获取其地址
|
3月前
|
C++ 运维
开发与运维编译问题之在C++中在使用std::mutex后能自动释放锁如何解决
开发与运维编译问题之在C++中在使用std::mutex后能自动释放锁如何解决
53 2
|
3月前
|
编译器 C++ 运维
开发与运维编译问题之在C++中创建一个简单的自旋锁如何解决
开发与运维编译问题之在C++中创建一个简单的自旋锁如何解决
23 2
|
3月前
|
NoSQL 编译器 Redis
c++开发redis module问题之如果Redis加载了多个C++编写的模块,并且它们都重载了operator new,会有什么影响
c++开发redis module问题之如果Redis加载了多个C++编写的模块,并且它们都重载了operator new,会有什么影响
|
3月前
|
NoSQL Redis C++
c++开发redis module问题之在复杂的Redis模块中,特别是使用第三方库或C++开发时,接管内存统计有哪些困难
c++开发redis module问题之在复杂的Redis模块中,特别是使用第三方库或C++开发时,接管内存统计有哪些困难
|
2月前
|
编解码 Linux 开发工具
大牛直播SDK跨平台RTMP直播推送模块技术设计和功能列表
大牛直播SDK是一款跨平台RTMP直播推送模块,支持Windows、Linux(x64_64与aarch64架构)、Android及iOS平台。该SDK功能全面,包括摄像头、屏幕、麦克风等数据采集与推送,并支持编码前后数据对接。其架构设计优秀,确保低延迟与高效率,结合SmartPlayer播放器实现毫秒级延迟体验。具备全自研框架,易于扩展且支持多种数据源接入,如外部YUV/RGB/H.264等格式。此外,各平台支持特性丰富,如Windows平台支持多摄像头合成,Android与iOS平台支持前后摄像头实时切换等。大牛直播SDK还提供了多个示例项目以帮助开发者快速上手。
|
2月前
|
编解码 开发工具 C#
[大牛直播SDK]Windows平台RTMP直播推送模块功能设计
大牛直播SDK采用全自研框架,具备高度可扩展性与自适应算法,显著降低延迟并提高采集编码效率。SDK以模块化设计,支持RTMP推流及多种音视频编码格式(如AAC、SPEEX、H.264、H.265),并能与播放器SDK组合实现丰富功能,包括流媒体转发、内置RTSP服务等。提供了详尽的参数配置选项,支持多摄像头、屏幕采集与水印叠加,并兼容Windows 7及以上操作系统。该SDK以C++/C#双接口形式提供,集成简便,同时包含调试与发布版本库,便于开发者快速上手。此外,支持断网重连、实时预览及多种编码前后的数据对接需求。
|
3月前
|
C++ 开发者
C++一分钟之-编译时计算:constexpr与模板元编程
【7月更文挑战第2天】C++的`constexpr`和模板元编程(TMP)实现了编译时计算,增强代码效率。`constexpr`用于声明编译时常量表达式,适用于数组大小等。模板元编程则利用模板进行复杂计算。常见问题包括编译时间过长、可读性差。避免方法包括限制TMP使用,保持代码清晰。结合两者可以解决复杂问题,但需明确各自适用场景。正确使用能提升代码性能,但需平衡复杂性和编译成本。
94 3

热门文章

最新文章

下一篇
无影云桌面