Friday, May 14, 2010

zlib

こないだ zlib はオフィシャルから配布されてた DLL を使いましたが、新バージョン公開後すぐにバイナリーが上がるわけではないみたい。なので自分で make してみた。

win32/DLL_FAQ.txt によればオフィシャルの DLL を使うよう推奨しているのにね…。

## Cygwin で
$ cd ~/src
$ wget http://zlib.net/zlib-1.2.5.tar.bz2
$ tar xjf zlib-1.2.5.tar.bz2

## MinGW で
$ cd zlib-1.2.5
$ cp contrib/asm686/match.S ./match.S
$ make LOC=-DASMV OBJA=match.o -fwin32/Makefile.gcc
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o adler32.o adler32.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o compress.o compress.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o crc32.o crc32.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o deflate.o deflate.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o gzclose.o gzclose.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o gzlib.o gzlib.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o gzread.o gzread.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o gzwrite.o gzwrite.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o infback.o infback.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o inffast.o inffast.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o inflate.o inflate.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o inftrees.o inftrees.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o trees.o trees.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o uncompr.o uncompr.c
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o zutil.o zutil.c
gcc -DASMV -Wall -c -o match.o match.S
ar rcs libz.a adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o match.o
windres --define GCC_WINDRES -o zlibrc.o win32/zlib1.rc
gcc -shared -Wl,--out-implib,libzdll.a -DASMV \
        -o zlib1.dll win32/zlib.def adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o match.o zlibrc.o
Creating library file: libzdll.a
strip zlib1.dll
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o example.o example.c
gcc -DASMV -o example.exe example.o libz.a
strip example.exe
gcc -DASMV -O3 -Wall -DNO_VIZ -c -o minigzip.o minigzip.c
gcc -DASMV -o minigzip.exe minigzip.o libz.a
strip minigzip.exe
gcc -DASMV -o example_d.exe example.o libzdll.a
strip example_d.exe
gcc -DASMV -o minigzip_d.exe minigzip.o libzdll.a
strip minigzip_d.exe

$ make test testdll -fwin32/Makefile.gcc
./example
zlib version 1.2.5 = 0x1250, compile flags = 0x255
uncompress(): hello, hello!
gzread(): hello, hello!
gzgets() after gzseek:  hello!
inflate(): hello, hello!
large_inflate(): OK
after inflateSync(): hello, hello!
inflate with dictionary: hello, hello!
echo hello world | ./minigzip | ./minigzip -d
hello world
./example_d
zlib version 1.2.5 = 0x1250, compile flags = 0x255
uncompress(): hello, hello!
gzread(): hello, hello!
gzgets() after gzseek:  hello!
inflate(): hello, hello!
large_inflate(): OK
after inflateSync(): hello, hello!
inflate with dictionary: hello, hello!
echo hello world | ./minigzip_d | ./minigzip_d -d
hello world

## Cygwin で
$ tar cvzf zlib-1.2.5-win32-x86-unofficial-uch.tar.gz \
> ./zlib-1.2.5/*.{exe,dll}
./zlib-1.2.5/example.exe
./zlib-1.2.5/example_d.exe
./zlib-1.2.5/minigzip.exe
./zlib-1.2.5/minigzip_d.exe
./zlib-1.2.5/zlib1.dll

いちおう置いてみます。オフィシャルの DLL が出たのに気づいたら消します。ダウンロード前に http://www.zlib.net/ をチェックしてみてください。

  • http://w4.hoso.net/files zlib-1.2.5-win32-x86-unofficial-uch.tar.gz

追記@Wed Aug 18 17:03:52 2010

オフィシャルの DLL がでています。

No comments:

Post a Comment