オープンソースのビルド libzip

提供:yonewiki

言語と開発環境に戻る。

概要

 https://libzip.org/のダウンロードの部分からlibzip-1.11.4.tar.xzあるいはlibzip-1.11.4.tar.gzよりダウンロードできます。2025年09月下旬現在。


 libzipは2005年から継続的に開発されていて、効率的で小型で柔軟性があります。


 Linux、macOS、Windows、その他多くのオペレーティングシステムで使用できます。


  • 下位互換性があり、安定したAPIを維持。
  • エラーが発生した場合でも、破損したファイルを作成しない。
  • データを削除しない。
  • 効率的。


 次の機能をサポートしています。


  • ファイルまたはメモリバッファからのアーカイブおよびファイルデータの読み取り
  • 保存されていない変更を元に戻す
  • Zip64 ラージ アーカイブ
  • Deflate、bzip2、LZMA、および zstd 圧縮
  • Winzip AES と従来の PKWARE 暗号化


 これらの機能により一般的なzipファイルの圧縮、解凍ができるようになります。

 

VisualStudio2022でのビルド手順

 まずは、上記リンクにあるサイトからlibzip-1.11.4.tar.gzをダウンロードします。バージョン1.11.4は2025年9月中旬時点の最新版でした。先にzlibをビルドしておく必要があります。オープンソースのビルド zlibを参考にビルドして下さい。


 そして以下のようにCMakeList.txtの中身の3行目~6行目を追記します。


cmake_minimum_required(VERSION 3.0.2)
 
set(ZLIB_ROOT C:/(zlibのパス)/)
set(LIB_INCLUDE_DIR C:/(zlibのパス)/out/install/x64-Debug/include)
set(ZLIB_LIBRARY_DEBUG C:/(zlibのパス)/out/install/x64-Debug/lib/zlibd.lib)
set(ZLIB_LIBRARY_RELEASE C:/(zlibのパス)/out/install/x64-Debug/lib/zlibd.lib)
 
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)


 解凍して、Visual Studioを起動して、フォルダを開くから解凍して生成されたlibzip-1.11.4フォルダを開きます。


 Makefileの処理が終わったら、ビルドからインストールを選択して実行します。さらにビルドからすべてをビルドを選択します。


 これで全ての作業が完了です。


 コンプリート!おめでとう!

 

使ったことのある機能

  • zip_t* zip_open(const char *path, 0, int flagsint *errorp);
#include <zip.h>
const char* path=zipファイルへのフルパス文字列
int flagsint* errorp=(int flagsint型の参照ポインタで)オープン処理におけるエラー情報を受け取る。
戻り値はzip_t*型で、オープン処理以降に使える関数で指定するzip_t*型変数として必要になるarchive。


  • zip_int64_t zip_get_num_entries(zip_t *archive, zip_flags_t flags);
#include <zip.h>
zip_t* archive=zip_open関数で取得するオープン中のzip_t*ポインタを指定する。
zip_flags_t flags=エントリー数を取得する際のflag値を指定する。
戻り値はzip_int64_t型で、zizファイルにエントリーされているファイルの総数を取得する。


  • zip_get_name(zip_t *archive, zip_uint64_t index, zip_flags_t flags);
#include <zip.h>
zip_t* archive=zip_open関数で取得するオープン中のzip_t*ポインタを指定する。
zip_uint64_t index=zipファイル内のindex番号についてファイル名を取得するようになる。
zip_flags_t flags=ファイル名を取得する際のflag値を指定する。


  • int zip_stat_index(zip_t *archive, zip_uint64_t index, zip_flags_t flags, zip_stat_t *sb)
#include <zip.h>
zip_t* archive=zip_open関数で取得するオープン中のzip_t*ポインタを指定する。
zip_uint64_t index=zipファイル内のindex番号についてスタッツ(統計的情報)を取得するようになる。
zip_flags_t flags=ファイル名を取得する際のflag値を指定する。
zip_stat_t* sb=統計的情報を取得するためのzip_stat_t*型の参照ポインタを指定する。
戻り値はint型で正常に完了すると、0 が返されます。それ以外の場合は、-1 は返され、エラー情報が設定されます。


  • zip_file_t* zip_fopen_index(zip_t *archive, ,zip_uint64_t indexzip_flags_t flags);
#include <zip.h>
zip_t* archive=zip_open関数で取得するオープン中のzip_t*ポインタを指定する。
0
zip_uint64_t indexzip_flags_t flags=ziファイル内のファイルポインタを取得する際のflag値を指定する。
戻り値はzip_file_t*型のzipファイル内のファイルポインタ


  • zip_fread(zip_file_t *file, ,void *bufzip_uint64_t nbytes);
#include <zip.h>
zip_t* archive=zip_fopen_index関数で取得するzipファイル中のファイルをオープンした中のzip_file_t*ポインタを指定する。
0 ファイルの中身を読み込むための文字列バッファのようなものの先頭アドレスを指定する。
void *bufzip_uint64_t nbytes=zip_stat_t* statのメンバ変数.sizeをstat.sizeのように指定して読み込むファイルのバッファサイズを指定する。
戻り値はzip_int64_t型で読み取ったファイルのサイズが返ります。


  • int zip_fclose()
#include <zip.h>
zip_t* archive=zip_fopen_index関数で取得するzipファイル中のファイルをオープンした中のzip_file_t*ポインタを指定して、指定したファイルポインタを閉じる。
戻り値はint型で正常なら0が返ります。それ以外の場合はエラーコードが返ります。

 

言語と開発環境に戻る。