読者です 読者をやめる 読者になる 読者になる

日記

ただの日記

QuaZIPをビルド【Windows】

QuaZIPをビルドする。Windows上のQtを使っている。
QuaZIPでDLLを作成し、DLLを自分のアプリケーションから呼び出すということをやった。

一応動いたが、他のサイトでやってることをいまいち理解できないまま、
こうやったらできるんじゃねという適当な考えで動かしているのが現状。

環境

  • Windows 8.1
  • Qt 4.2.1(Community)
  • QuaZIP 0.7.3
  • zlib 1.2.3
    • ちょっと古い

いろいろ入手

QuaZIPをダウンロードしてくる。

コンパイル済みのDLLをダウンロードしてくる。

ビルド

  • quazip-0.-.-/quazip.pro をQt Creatorで開く
  • quazip/quazip.proを開く
  • quazip.proにテキスト追加
LIBDIR += "C:/~~~/zlib123dll/dll32"
INCLUDEPATH += "C:/~~~~~/zlib123"
win32 {
    LIBS += -L$${LIBDIR} -lz
}
  • ビルド(B) -> すべてリビルド
  • quazip.dllができている

今回は使用しなかったが、スタティックライブラリ(.a)を使用する場合はquazip.proに

CONFIG += staticlib

を追加した。Windowsのスタティックライブラリは.libだろとという思い込みから、
いろいろハマってしまったのだが、コンパイラMinGW-g++であるためLinuxと同様に.aなんだね。

ビルドしたDLLを使用

C++でDLLを使用するためには、ヘッダファイルとDLLファイルが必要になる。
Linuxなどでquazipをビルドした場合はmake installにより、共有ライブラリとして利用できるようになるが、
WindowsかつQt Creatorでビルドした場合はプロジェクトを含むディレクトリと同じ階層にディレクトリが
作られるのみである。

だから、まずはDLLを新たなプロジェクトの任意のディレクトリに移す。同時にヘッダファイルも移す。 ヘッダファイルはダウンロードしたquazipのソースコードと同封されている。あたりまえか。

あとは、設定であるが、以下の2行を追加した。今回libディレクトリを生成し、その中にdllを入れたが、 配置場所によって適宜変更。

LIBS += "$$PWD/quazip.dll"
INCLUDEPATH += $$PWD/.

これで動くだろと思ったら、起動した瞬間アプリケーションがクラッシュした。 それもそのはず、DLLファイルがビルド後実行する際に同一ディレクトリに無いのだ。
そこで、最初のクラッシュは我慢するとして、DLLファイルをビルドした実行形式ファイルと同じディレクトリにコピーしたところようやく実行された。

おそらく、こんな面倒なことをしなくても自動的にコピーしてくれるような機能はあると思うが
ここまでに疲弊したので、一旦締める。

お試し実行

JlCompress::compressFile("D:/test/test.zip", "D:/test/test.jpg");

これでD:\test\test.jpgを圧縮して、D:\test\test.zipを生成してくれた。

参考