最近想使用7zip壓縮,就研究了下7zip的SDK,將過程留下,分享與大家。這是本篇系列的第一篇,主要內容就是編譯。
7zip
嚴格來說,7zip這個詞是有問題的,因為官方使用了不同的詞來表達恰當的含義,如下圖所示:

因為這次研究的主要目的就是在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解壓后,結構如下:

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
參考如下圖:

編譯后的文件在O目錄中,文件名為7zxr.dll
