惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
Jina AI
Jina AI
雷峰网
雷峰网
月光博客
月光博客
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
美团技术团队
C
CXSECURITY Database RSS Feed - CXSecurity.com
小众软件
小众软件
Security Latest
Security Latest
Microsoft Azure Blog
Microsoft Azure Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
Last Week in AI
Last Week in AI
A
Arctic Wolf
Latest news
Latest news
Attack and Defense Labs
Attack and Defense Labs
I
Intezer
F
Fortinet All Blogs
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Webroot Blog
Webroot Blog
S
Secure Thoughts
Help Net Security
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
V
Visual Studio Blog
P
Proofpoint News Feed
博客园 - 【当耐特】
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary
云风的 BLOG
云风的 BLOG
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
H
Help Net Security
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
T
Tailwind CSS Blog
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tenable Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog

博客园 - 林杰的博客

WORD2012 中使用“全屏阅读” Office2012中使用“冻结窗格”功能锁定标题栏 开发工具:Visual Studio 2005下方便宜用的代码行统计工具 为Visual Assist设置快捷键 Visual Studio 2010的Python支持工具 Linux 使用pid文件结束nginx 让Win7资源管理器显示图片内容预览 Python 单元测试带案例名称输出 Linux 系统安装配置NTP时间服务器 Editplus中.proto文件的高亮文件 c#美味: 微软图表控件MSChart安装部署 测试工具:用性能监视器查看程序的性能 C#美味:Linq入门 讲座 C++零食:使用Unicode版的预定义宏__FUNCTION__ C++零食:VC中使用ForceInclude来强制包含stdafx.h C++零食:重启后消失的注册表键值 C++零食:WTL中使用双缓冲避免闪烁 C++零食:wprintf 中使用%I64d格式化输出LONGLONG C++零食:HRESULT 与 Windows Error Codes 不是一回事
7z系列之一:7zip SDK中C++模块的编译
林杰的博客 · 2011-10-26 · via 博客园 - 林杰的博客

最近想使用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