[No0000AB]用Visual Studio 2015在 WIN10 64bit 上编译7-zip (32 bit)
1.7-ZIP简介
7-zip 是一款免费的压缩解压软件。ZIP格式的文件默认被苹果和微软支持,完全不需要额外安装其他软件就可以解压。但对于非US-ASCII编码的文件名和大于2GB的ZIP文件,可能需要借助如WinRAR和7-ZIP软件也解压。同时7-ZIP完全免费,其支持的7Z压缩格式的压缩率相对RAR压缩格式更好。7-ZIP官网是http://www.7-zip.org/。
2.在VS2015上编译7-ZIP代码的详细步骤
需要的材料:
- Microsoft Visual Studio 2015
- 可以解压.bz2(如bunzip2.exe)和.tar文件格式的解压工具,如WinRAR(用于解压7-ZIP 9.20 版本源码)
步骤A:下载并解压源码文件
- Sourceforge下载地址http://sourceforge.net/projects/sevenzip/files/

网站上有1)"LZMA SDK"和2)"7-Zip"两个项目,我们需要下载"7-Zip",并保存到你本地电脑。
用WinRAR解压源码。
- 也可以从官网下载:http://www.7-zip.org/download.html

对于9.20版本的源码可以用下面的命令行解压(需要安装bunzip和tar解压工具):
bunzip2.exe –d 7z920.tar.bz2 tar -xvf 7z920.tar cd CPP
(剩下的命令需要在解压出来的CPP文件夹下完成)
步骤B:添加Visual Studio环境到系统Path
主要是添加"ml.exe" 和 "nmake"到系统环境。
默认的VS2015并没有添加上述两个程序到环境变量里,我们需要运行"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\vsvars32.bat"进行添加。上述的路径可能会因为您安装VS2015路径的不同而不同。
步骤C:修正7-ZIP源码
删除"源码\CPP\Build.mak"33行中的"-OPT:NOWIN98",(先解除只读属性)


在命令行中删除33行"-OPT:NOWIN98"的命令如下(需要vim编辑器):
vi .\CPP\Build.mak OLD_BAD_LINE-> LFLAGS = $(LFLAGS) -OPT:NOWIN98 NEW_CORRECT-> LFLAGS = $(LFLAGS)
步骤D:编译它,生成exe(只支持xp及其更高级的系统)
用vs命令提示符工具nmake,cd到%7z_source%\CPP\7zip目录,执行 nmake NEW_COMPILER= MY_STATIC_LINK=
等待编译结束即可,编译大概需要几分钟的,看人品和机器配置。

步骤E:拷贝出生成的exe
上面的编译会产生如下的exe
.\CPP\7zip\Bundles\Alone\O\7za.exe *******************支持ZIP文件 .\CPP\7zip\Bundles\Alone7z\O\7zr.exe ******************* .\CPP\7zip\Bundles\Fm\O\7FM.exe *******************文件管理'File Manager',图形界面gui .\CPP\7zip\Bundles\LzmaCon\O\lmza.exe ******************* .\CPP\7zip\UI\Client7z\O\7z.exe *******************第一次运行会报错,无法加载7-zip库"Can not load 7-zip library" .\CPP\7zip\UI\Console\O\7z.exe *******************第一次运行报错,找不到压缩编码"7-Zip cannot find the code that works with archives." .\CPP\7zip\UI\FileManager\O\7zFM.exe *******************调频"Frequency Modulation" .\CPP\7zip\UI\GUI\O\7z.exe ******************* .\CPP\7zip\UI\Console\O\7z.exe *******************这个可以直接用命令行模式使用
使用7za.exe,
copy .\CPP\7zip\Bundles\Alone\O\7za.exe D:\7-Zip\7za.exe ::先单独拷贝出exe程序 cd D:\tmp ::进入其他目录(这个目录下放一个foo.zip文件)

D:\7-Zip\7za.exe l D:\tmp\foo.zip ::列出foo.zip中的文件。

D:\7-Zip\7za.exe x D:\tmp\foo.zip ::解压foo.zip文件到当前文件夹

步骤F:用VS打开项目
使用VS打开%7z_source%\CPP\7zip\Bundles\Format7zF\Format7z.dsw,提示迁移有个错误。忽略即可。

打开后,第一次全部编译会报错

右键项目属性-》

C/C++ -》常规 –》调试信息格式 由"用于"编辑并继续"的程序数据库 (/ZI)"改为"程序数据库 (/Zi)"

C/C++ -》代码生成 –》启用函数级链接 –》改为"是 (/Gy)"

再次编译,报错信息如下(Debug模式下):

原因是由于C盘的特殊权限造成的。
把输出路径改一下:项目右键-》属性-》配置属性-》链接器-》常规-》输出文件 改为 比如说"D:\7-Zip\7z.dll"

更改后,请注意 项目右键-》属性-》配置属性-》链接器-》所有选项-》输入文件 也会自动变为更改后的路径。

再次编译,报错信息如下(Debug模式下):

原因是在Debug模式下7zCrcOpt.asm和AesOpt.asm的 属性-》配置属性-》自定义生成工具-》常规-》输出是 "$(OutDir)\$(InputName).obj;%(Outputs)",应改为"$(OutDir)\%(Filename).obj;%(Outputs)"

右键将两个asm文件的 属性-》配置属性-》自定义生成工具-》常规-》输出更改后,再次编译(Debug模式下),报错如下:

原因是7zCrcOpt.asm在Debug模式下 属性-》配置属性-》自定义生成工具-》常规-》命令行是 "ml.exe -c -omf -Fo$(OutDir)%(Filename).obj %(FullPath)"而Release模式下是"ml.exe -c -Fo$(OutDir)%(Filename).obj %(FullPath)"。-omf 意思是"generate OMF format object file".谁知道这是什么鬼。。删掉。 同时也把AesOpt.asm 属性-》配置属性-》自定义生成工具-》常规-》命令行改为 "ml.exe -c -Fo$(OutDir)%(Filename).obj %(FullPath)"

再次编译,报错信息如下:

解决办法:
项目属性 –》配置属性-》链接器-》命令行-》其他选项(D)中粘贴"/SAFESEH:NO"

终于编译通过了

同样的,如果要修改Release版本,也需要将7zCrcOpt.asm和AesOpt.asm做个修改。


附注,7-ZIP目录结构:
[Bundle]
Alone 7za.exe: Standalone version of 7z
Alone7z 7zr.exe: Standalone version of 7z that supports only 7z/LZMA/BCJ/BCJ2
SFXCon 7zCon.sfx: Console 7z SFX module
SFXWin 7z.sfx: Windows 7z SFX module
SFXSetup 7zS.sfx: Windows 7z SFX module for Installers
Format7z 7za.dll: .7z support
Format7zExtract 7zxa.dll: .7z support, extracting only
Format7zR 7zr.dll: .7z support, LZMA/BCJ* only
Format7zExtractR 7zxr.dll: .7z support, LZMA/BCJ* only, extracting only
Format7zF 7z.dll: all formats [UI]
Agent Intermediary modules for FAR plugin and Explorer plugin
Console 7z.exe Console version
Explorer Explorer plugin
Resource Resources
Far FAR plugin
Client7z Test application for 7za.dll [Compress]
BZip2 BZip2 compressor
Branch Branch converter
ByteSwap Byte Swap converter
Copy Copy coder
Deflate
Implode
Arj
LZMA
PPMd Dmitry Shkarin's PPMdH with small changes.
LZ Lempel - Ziv [Crypto]
7zAES Cipher for 7z
AES AES Cipher
Rar20 Cipher for Rar 2.0
RarAES Cipher for Rar 3.0
Zip Cipher for Zip
[No0000AB]用Visual Studio 2015在 WIN10 64bit 上编译7-zip (32 bit)的更多相关文章
- Visual studio 2015程序转Eclipse gun编译出现的问题总结
Visual studio 2015程序转Eclipse gun编译出现的问题总结 1.C++11支持 1)Project settings project右键-> c/c++ build -& ...
- Visual Studio 2015 终于还是装上了
win8.1系统 vs2015.preview_ult_CHT.iso 大小4.46G, http://download.microsoft.com/download/9/9/1/99133C05-3 ...
- 关于visual studio code在win10系统上安装后会报扩展宿主意外终止的解决方法
我的电脑的地址 C:\Users\Administrator.SC-201810160958\AppData\Local\Programs\Microsoft VS Code\resources\ap ...
- visual studio 2015安装win10 SDK文件校验错误的解决方法
这段时间想看一下UWP开发,于是下载了visual 2015 update1社区版,但是在安装完成时提示,windows 10 sdk文件校验码错误,如下图(图片是借用的,我当时没有截屏,错误号是一样 ...
- [No0000AD]7z源码完全移植至Visual Studio 2015
今天在上次的基础上(原文地址:[No0000AB]用Visual Studio 2015在 WIN10 64bit 上编译7-zip (32 bit)),将7Z的源码完全移植到了vs2015开发环境下 ...
- Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用
Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用 Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.cs ...
- ASP.NET5之客户端开发:Grunt和Gulp构建工具在Visual Studio 2015中的高效的应用
Grunt和Gulp是Javascript世界里的用来做自动压缩.Typescript编译.代码质量lint工具.css预处理器的构建工具,它帮助开发者处理客户端开发中的一些烦操重复性的工作.Grun ...
- Xamarin.Forms教程下载安装Visual Studio 2015
Xamarin.Forms教程下载安装Visual Studio 2015 下载安装Visual Studio 2015 Visual Studio 2015是微软提供的IDE,其中集成了Window ...
- Visual Studio 2017创建.net standard类库编译出错原因
正式版上个月已经Release了,从那时到现在经常会收到更新提示,估计问题还不少吧!其中最吸引我的当然是.net standard与.net core. 刚好最近接触.net standard项目,新 ...
随机推荐
- Solr5.5.1 IK中文分词配置与使用
前言 用过Lucene.net的都知道,我们自己搭建索引服务器时和解决搜索匹配度的问题都用到过盘古分词.其中包含一个词典. 那么既然用到了这种国际化的框架,那么就避免不了中文分词.尤其是国内特殊行业比 ...
- ActiveMQ消息队列的使用及应用
这里就不说怎么安装了,直接解压出来就行了. 谢绝转载,作者保留所有权力 目录: 一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2 ...
- 在iOS中实现一个简单的画板App
在这个随笔中,我们要为iPhone实现一个简单的画板App. 首先需要指出的是,这个demo中使用QuarzCore进行绘画,而不是OpenGL.这两个都可以实现类似的功能,区别是OpenGL更快,但 ...
- IIS服务器多域名证书绑定443端口解决方案
一个服务器IIS要绑定多个HTTPS站点(该方法在此之前,有进行测试其他网站域名的ssl证书,测试没有问题) 默认情况一个服务器的IIS只能绑定一个HTTPS也就是443端口 要实现多个站点对应HTT ...
- C++四种类型转换方式。
类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...
- js正则表达式校验非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 在WPF按钮删除默认的鼠标悬停效果
如果你想在应用程序的所有按钮将此风格,那么这种风格可以插入Application.Resources部分的App.xaml页面. <Window.Resources> <Style ...
- (原创)解决.net 下使用uploadify,在火狐浏览器下的error 302
简单粗劣说下哈,通过uploadify中flash在火狐下上传,造成了erroe 302, 是因为其session丢失,并修改了其sessionID. 网上有很多案列,可并没有这么直接.感觉绕了点弯. ...
- Centos下搭建 tomcat https服务器详解(原创)
一 .安装java jdk配置环境变量 1. 卸载原有openjdk yum -y remove java-1.7.0-openjdk* yum -y remove tzdata-java.noarc ...
- [deviceone开发]-do_Webview加载JQueryMobile的示例
一.简介 JQueryMobile是JQuery的移动版,不过它并没有像JQuery那么成功.我们只是使用JQueryMobile来展示do_Webview加载第三方js框架.适合所有开发者.二.效果 ...