最近由于工作需要在研究7z的开源代码, 其实说是研究也谈不上,只是在使用7z的开发包的时候碰到了一个解压的问题,想定位一下原因,因此从官网上下载了源代码调试一下.
7z是个跨平台的项目, 我们是在windows上开发,总体上说工程文件还算是齐全, 不需要太多的配置.
源代码目录下有几个目录,常用的有几个:
1. CPP\7zip\UI\GUI\GUI.dsp UI界面的工程.
2. CPP\7zip\Bundles\Format7zF 7z.dll的工程,支持大部分的压缩格式.
3. CPP\7zip\Bundles\Alone7z 7z.dll工程,仅支持7z格式.
我是使用vs2008进行编译的, 打开dsp的时候转换工程文件,都没有问题.
Debug下编译, 会碰到的问题:
1. fatal error LNK1107: 文件无效或损坏: 无法在 0x2E0 处读取
解决方法:
项目-->项目属性-->配置属性-->清单工具-->使用FAT32解决方法为 是;
如果是编译.Bundles\Format7z的工程里,在Asm/7zCrcOpt.asm上右键属性,去掉常规-->命令行中的-omf
同样在Asm/AesOpt.asm中去掉-c以外的选项
原因:vs6和vs2008区别造成的,参数-omf为vc6服务的。
2. LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt
解决方法:
项目-->工程属性->配置属性-> 清单工具->输入和输出->嵌入清单,选择[否]
项目-->项目属性-->配置属性-->清单工具-->使用FAT32解决方法为 是;
编译完之后,debug版在启动7zg.exe进行调试的时候会报一个错误, 提示 丢失msvcrtd90.dll文件, 只需要将
项目属性-->配置属性-->C/C++-->代码生成-->运行时库 改成多线程调试(Mtd)即可.