「オープンソースのビルド libzip」の版間の差分

提供:yonewiki
(ページの作成:「<yjavascript></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/vs2015.css"> <link rel="stylesheet" href="https://wiki.yo-net.jp/custom.css"> <script src="https://wiki.yo-net.jp/highlight/highlight.js"></script> <script src="https://wiki.yo-net.jp/custom.js"></script> <script></yjavascript> 言語と開発環境に戻る。 == '''概要''' ==  [https://libzip.org/ h…」)
 
 
(同じ利用者による、間の2版が非表示)
37行目: 37行目:


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




 解凍して、Visual Studioを起動して、フォルダを開くから解凍して生成されたlibzip-1.11.4フォルダを開きます。
 そして以下のようにCMakeList.txtの中身の3行目~6行目を追記します。
 
 
 Makefileの処理が終わったら、ビルドからインストールを選択して実行します。さらにビルドからすべてをビルドを選択します。
 
 
 LNK1118: 'VERSION' ステートメントに構文エラーがあります。というエラーになります。このエラーをダブルクリックするとzlibvc.defが開きます。




54行目: 48行目:
data-line-highlight="3, 10-"
data-line-highlight="3, 10-"
data-max-lines="10"
data-max-lines="10"
code class="language-cmake"
-->
-->
<div class="hljs-wrap"><pre data-label="zlibvc.def" data-line-num-start="4" class="pre-wrap">
<div class="hljs-wrap"><pre data-label="CMakeList.txt" class="pre-wrap">
<code>VERSION 1.3.1</code></pre></div>
<code class="language-cmake">cmake_minimum_required(VERSION 3.0.2)
&nbsp;
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)
&nbsp;
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)</code></pre></div>
<script></yjavascript>
<script></yjavascript>




とある行を、
 解凍して、Visual Studioを起動して、フォルダを開くから解凍して生成されたlibzip-1.11.4フォルダを開きます。
 
 
 Makefileの処理が終わったら、ビルドからインストールを選択して実行します。さらにビルドからすべてをビルドを選択します。
 


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


<yjavascript></script>
 
<!--
 コンプリート!おめでとう!
data-line-num-start="1"
 
data-line-highlight="3, 10-"
 
data-max-lines="10"
 
code class="language-cmake"
== '''使ったことのある機能''' ==
-->
*zip_t* zip_open(const char *path, 0, int flagsint *errorp);
<div class="hljs-wrap"><pre data-label="zlibvc.def" data-line-num-start="4" class="pre-wrap">
:&#x23;include &lt;zip.h&gt;
<code>VERSION 1.31</code></pre></div>
 
<script></yjavascript>
: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);
:&#x23;include &lt;zip.h&gt;
 
: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);
:&#x23;include &lt;zip.h&gt;
 
: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)
:&#x23;include &lt;zip.h&gt;
 
: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);
:&#x23;include &lt;zip.h&gt;
 
: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);
:&#x23;include &lt;zip.h&gt;
 
: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型で読み取ったファイルのサイズが返ります。




とします。そして、再度、ソリューションをビルドすると正常にビルドが完了します。defファイルはモジュール定義ファイルで、VERSIONの記述形式がX.XXという形式にするという決まりになっているためzlibがバージョン管理に使っているx.x.xというパターンではエラーになるということみたいです。zlibの管理人はあまりvcの仕組みについては熟知していないか、その互換性に関心がないのかもしれません。それでもちょっと修正するだけで、モジュール定義ファイルがそのままVCで使えるだけありがたいと思った方がいいですね。
*int zip_fclose()
:&#x23;include &lt;zip.h&gt;


:zip_t* archive=zip_fopen_index関数で取得するzipファイル中のファイルをオープンした中のzip_file_t*ポインタを指定して、指定したファイルポインタを閉じる。


コンプリート!おめでとう!
:戻り値はint型で正常なら0が返ります。それ以外の場合はエラーコードが返ります。


 
 


[[メインページ#言語と開発環境|言語と開発環境]]に戻る。
[[メインページ#言語と開発環境|言語と開発環境]]に戻る。

2025年9月29日 (月) 23:09時点における最新版

言語と開発環境に戻る。

概要

 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が返ります。それ以外の場合はエラーコードが返ります。

 

言語と開発環境に戻る。