C++ のプログラムで libzip を使用して、zip アーカイブからファイルを抽出したいと考えています。まず、ファイルの数を取得し、それらの名前を取得して読み取ります。ファイルの数を取得するには、「zip_get_num_entries」を使用します。そのプロトタイプは次のとおりです。
zip_uint64_t zip_get_num_entries(struct zip *, int)
そして、私がこの関数を使用する方法:
int nbrEntries(0);
zip *archive = zip_open("myZip.zip", 0, 0);
nbrEntries = zip_get_num_entries(archive, 0);
このコードを書いたとき、Code::Blocks が zip_get_num_entries を提案してくれたので、ヘッダーの問題はありません。しかし、コンパイルすると、コンパイラ (MinGW) から次のように言われました。
undefined reference to `_imp__zip_get_num_entries'
そこで、廃止された同等の zip_get_num_files を試してみましたが、うまくいきました。CMake で作成したプロジェクト libzip.dll.a にインクルードしました。libzip.dll と libzip.dll.a の 2 つのファイルがありました。
ライブラリの問題だと確信しています (MacOS ではこの問題は発生していないことに注意してください) が、これを解決する方法がわかりません。ありがとうございました!
編集:私は彼らのウェブサイトを検索し、zip_get_num_files の実装は、ウェブサイトで利用可能なライブラリをリリースしたときに新しいものであると読みました。そのため、Mercurial リポジトリを検索したところ、2 日前にリリースされたバージョンが見つかりました (Web サイトでのリリースよりも少し新しいもので、ほぼ 1 年が経過しています)。CMakeでビルドしたらうまくいきました!