途中でスレッドを終了させて、あの後しばらく調べたので再度質問しに来ました。
とりあえず仮のデータ この二つを圧縮してファイルに書き込む処理を書きたいです。
そしてソースを書いてみたのですが(一番下)いくつかどうすればいいのかわからなかった所をご教示願います。
zlibのインストールの方法が分からなかったのでとりあえず公式からダウンロードしたファイルから
"zlib.h"と"zconf.h"の二つのファイルだけコピーしてプロジェクトに追加し、そのままインクルードしたのですが、
ちゃんと使うにはどうすればいいのでしょうか?
一応説明で「ブラウザや wget により tarball をダウンロードした後は,configure, make, make check, make install という一般的な手順でインストールします」というのは読んだのですが全く意味が分かりません。
「zlib を軽く試してみるのであれば,make check まで終わった時点で,zlib.h, zconf.h, libz.a のみをコピーして使うことも可能です.」とも書いていたのですがlibz.aは見つからず、「make check まで終わった時点で」
というのも分からないのでとりあえず"zlib.h"と"zconf.h"の二つのファイルだけコピーしてプロジェクトに追加した次第です。
そして正しくインストールできていないからなのか下の様なエラーメッセージが出てしまいます。
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
エラー LNK2019 未解決の外部シンボル _compress2 が関数 _main で参照されました。 ファイル圧縮 C:\Users\ユーザーファイル\Documents\Visual Studio 2017\Projects\ファイル圧縮\ファイル圧縮\main.obj 1
#include "zlib.h"
#include "zconf.h"
#include <stdio.h>
#include <Windows.h>
#include <iostream>
#include <string>
static int test[20];
static int test2[40];
int main() {
unsigned char *buffer = (unsigned char*)malloc(64 * 1024 * 1024); // 保存するデータより十分大きいメモリを確保
int size = 0;
//メモリに書き込み
memcpy(buffer + size, &test, sizeof(int) * 20);
size += sizeof(int) * 20;
//メモリに書き込み
memcpy(buffer + size, &test2, sizeof(int) * 40);
size += sizeof(int) * 40;
unsigned char *press_buffer = (unsigned char*)malloc(64 * 1024 * 1024); // 圧縮データより十分大きいメモリを確保
int press_size;
Bytef *press_buffer2 = (Bytef*)malloc(64 * 1024 * 1024); // 圧縮データより十分大きいメモリを確保
uLong press_size2;
//~~~~~~~~~~~~~~~~~~~~~~~~~
// buffer のデータを圧縮して press_buffer に格納、圧縮後のデータサイズを press_size に格納する処理
//~~~~~~~~~~~~~~~~~~~~~~~~~
compress2(press_buffer, &press_size2, buffer, uLong(sizeof(buffer)), Z_BEST_COMPRESSION); //圧縮
FILE *fp;
errno_t err;
err = fopen_s(&fp, "data.sav", "wb"); //書き込みでファイルを開く fwrite(&fh, sizeof(file_header_t), 1, fp); //ファイルのヘッダ情報
// 圧縮データのサイズを書き出し
fwrite(&press_size, sizeof(int), 1, fp);
// 圧縮データを書き出し
fwrite(press_buffer, press_size, 1, fp);
fclose(fp); //ファイルを閉じる
// 確保したメモリの解放
free(buffer);
free(press_buffer);
Sleep(10000);
return 0;
}