[笔记] 编译bit7z踩坑记录

简介: [笔记] 编译bit7z踩坑记录

前言

最近在使用解压各种格式文件,做进一步内容检测,发现docx是zip格式,doc是ole格式,zip格式可以用zlib库解压,ole却不行,发现7z可以解压,于是便有了一系列的操作。

步骤

bit7z 是一个开源项目,在7z的基础上做了一层封装,依赖7z的库,所以编译使用过程需要加入7z的DLL,和头文件等。

简单编译bit7z描述整个过程:

  1. 拉去bit7z代码
  2. 下载7z sdk
  3. 7z sdk解压放到到bit7z项目的third_part目录7-Zip
  4. 7z sdk解压再放到bit7z项目的include目录
  5. 下载7z sdk extra补充包 解压其中7za.dll 或者 7z.dll(根据自己的需求确认)
  6. 按照官网文档使用cmake构建和编译:
cd <bit7z folder>
mkdir build && cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release
cmake --build . -j --config Release

注意:

7za.dll 只支持7z格式的解压和压缩

7z.dll 支持大多数格式的解压和压缩。

解压测试

注意:BitFormat::Auto 选项需要编译bit7z时,添加 BIT7Z_AUTO_FORMAT宏

// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
/*
 * bit7z - A C++ static library to interface with the 7-zip shared libraries.
 * Copyright (c) 2014-2022 Riccardo Ostani - All Rights Reserved.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
 */
 //#define BIT7Z_USE_NATIVE_STRING
#define BIT7Z_AUTO_FORMAT
#include <bitexception.hpp>
//#include <bitarchiveinfo.hpp>
#include <bit7zlibrary.hpp>
#include <bitarchivereader.hpp>
#include <bitfileextractor.hpp>
#include <iostream>
//#pragma comment(lib, "D:\\workspace\\github\\bit7z\\lib\\x64\\Release\\bit7z64.lib")
using namespace std;
using namespace bit7z;
int main(int argc, char* argv[]) {
    try { // bit7z classes can throw BitException objects
        using namespace bit7z;
        Bit7zLibrary lib{ "D:\\workspace\\github\\bit7z\\bin\\x64\\Debug\\7z.dll" };
        BitFileExtractor extractor{ lib, BitFormat::Auto };
        // Extracting a simple archive
        extractor.extract("D:\\test_office.doc", "D:\\test_office\\");
        // Extracting a specific file
        //extractor.extractMatching("path/to/archive.7z", "file.pdf", "out/dir/");
        // Extracting the first file of an archive to a buffer
        //std::vector< byte_t > buffer;
        //extractor.extract("path/to/archive.7z", buffer);
        // Extracting an encrypted archive
        //extractor.setPassword("password");
        //extractor.extract("path/to/another/archive.7z", "out/dir/");
    }
    catch (const bit7z::BitException& ex) {
        printf(ex.what());
    }
    return 0;
}

总结

主要参考这个文章的:!!!C++ 7z解压缩编译及使用!!!

参考:

7z源码的编译与使用_markdown 格式

7z文件格式及其源码的分析(二)

笔记:7-zip在Visual Studio 2019下的编译

c++配置并使用bit7z加密压缩或解压7z文件


相关文章
|
Windows
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
关于 Qt设置置顶窗口,透明部分显示黑色底色(已设置透明窗口) 的解决方法
|
网络协议 IDE Linux
mongoose使用详细 -- 如何通过mongoose搭建服务器
mongoose使用详细 -- 如何通过mongoose搭建服务器
3437 0
|
8月前
|
人工智能 物联网 机器人
从0到1系统学习大模型:一份接地气的入门指南
本文为大模型入门者量身定制的实战指南:破除“数学/硬件/教材”焦虑,主张“先动手、再补缺”;聚焦Transformer核心原理、Prompt工程、LoRA微调、RAG应用与轻量部署;推荐高效资源与避坑策略,强调以小项目驱动学习,助你少走弯路、快速落地。
2755 4
|
10月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL Docker 容器化部署全指南
本文为MySQL Docker单实例生产部署规范v1.0,涵盖镜像拉取、4种部署方案(测试/单机/企业入门)、结果验证与5类常见问题解决,集成备份恢复、安全基线及HA选型建议,适配SaaS初创、中小企及私有化场景,强调数据持久化、资源限制与内网安全访问,不适用于金融级高可用场景。
1039 3
|
算法 Java Linux
7-zip 压缩算法及C SDK使用
7-zip 压缩算法及C SDK使用
2427 0
|
存储 监控 安全
如何排查常见的 Windows 应用程序错误和崩溃
本文介绍了如何通过事件日志分析来诊断Windows应用程序错误和崩溃的根本原因。文章首先解释了应用错误的表现形式及常见事件ID(如1000、1001等),并分析了导致崩溃的原因,包括硬件问题(如存储不足、外部因素)和软件问题(如编码错误、数据损坏、.NET Framework兼容性)。接着,提供了几种故障排除方法,例如运行系统文件检查器(SFC)、执行干净启动、检查更新以及重新安装.NET Framework。最后,探讨了使用日志管理工具(如EventLog Analyzer)集中分析崩溃事件的功能,包括预置报表、时间轴分析、实时警报和自动化响应,帮助管理员高效解决应用问题。
3267 1
|
算法 Unix Linux
7z——拥有极高压缩比的开源压缩软件
【11月更文挑战第6天】7z 是一种开源压缩软件,具有高压缩比、开源特性、功能丰富、跨平台支持和良好兼容性等特点。它采用先进的压缩算法,支持大文件、加密和多种压缩格式,广泛应用于个人和企业文件管理。
2852 3
|
Ubuntu 安全 网络协议
|
编译器 C语言
C语言中的浮点数:深入探索与应用
C语言中的浮点数:深入探索与应用
3137 1
vmware-17虚拟机安装教程(保姆级,包含图文讲解,不需注册账户)
vmware-17虚拟机安装教程(保姆级,包含图文讲解,不需注册账户)