VisualStudio2015 で zlib を使いたい(64bit)

09 August 2015
#C++#zlib

Windows7(64bit) + VisualStudio2015でzlib(compress()/uncompress())を使うまでのメモ。

ちなみに言語はC++です。

zlibをダウンロード

http://zlib.net/から「zlib source code, version 1.2.8」をダウンロードします。

執筆時点ではzlib 1.2.8が最新バージョンでした。以降の説明はzlib 1.2.8での説明になるので、今後のバージョンアップによっては操作が異なる場合もあるかもしれません。

zlibをビルド

zlib 1.2.7 を Visual Studio 2012 Express でビルドするを参考に、zlibをビルドします。

上記参考ページに記載されるエラーが全員登場しましたが、ページの通りに操作することで対処出来ました。

また、zlib 1.2.8ではcontrib/vstudio/vc11フォルダがあるため、vc10ではなくvc11内のソリューションでビルドを行いました。

加えて、zlibstat.libのリンクはVisual Studio側の設定で行っています(過去記事参照)。

64bit環境での利用

私の環境では、上の参考ページの通りに操作するとzlib利用時に
アプリケーションを正しく起動できませんでした 0xc00007b
というエラーメッセージと共にアプリケーションが終了してしまいます。

少し調べると、ライブラリとライブラリを使用する側でx86とx64が混在していると発生するようです。

VisualStudioではそれらの系が混在していると「x86とx64が競合しています」的なエラーを吐いてくれる気がするのですが……(勉強不足)

ともかく、以下の方法で動作を確認しました。

  1. zlibのターゲットをx64に変更する
  2. zlib利用側のターゲットもx64に変更する
ソリューションのターゲットを変更するには、VisualStudioのソリューションエクスプローラーからソリューションを右クリック→構成マネージャー(O)で次のような画面が表示されるので、アクティブソリューションプラットフォームをx64に変更します。

bandicam 2015-08-08 23-20-54-284

いつくかのビルドに失敗しますが、自分が目的としているzlibstat.libがソリューション下のx64/ZlibStatDebug/に生成されているので良しとします。

同様に利用側のターゲットも変更します。 あとは、生成されたzlibstat.libを利用側のソリューション下に配置してあげれば、とりあえずWin64環境では動くはずです。

もっとスマートな解決方法をご存知の方は是非教えてください…

かなり強引なやり方だと思うので最後の手段的としてどうぞ!

4423.ch