windows下命令行编译zlib

来源:互联网 发布:老七贸易知乎 编辑:程序博客网 时间:2024/06/05 11:24

下载zlib

解压,在win32的目录下创建下面两个文件

1 Makefile32.msc

内容如下


TOP = .
LIBDIR = ./lib
# optional build flags
LOC =


STATICLIB = zlib_x86.lib
SHAREDLIB = zlib1_x86.dll
IMPLIB    = zdll_x86.lib

CC = cl
AS = ml
LD = link
AR = lib
RC = rc
CFLAGS  = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib_x86" $(LOC)
WFLAGS  = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
ASFLAGS = -coff -Zi $(LOC)
LDFLAGS = -nologo -debug -incremental:no -opt:ref
ARFLAGS = -nologo
RCFLAGS = /dWIN32 /r


OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \
       gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj
OBJA =


all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) 

$(STATICLIB): $(OBJS) $(OBJA)
$(AR) $(ARFLAGS) -out:$(LIBDIR)/$@ $(OBJS) $(OBJA)

$(IMPLIB): $(SHAREDLIB)

$(SHAREDLIB): $(TOP)/win32/zlib.def $(OBJS) $(OBJA) zlib1.res
$(LD) $(LDFLAGS) -def:$(TOP)/win32/zlib.def -dll -implib:$(IMPLIB) \
 -out:$(LIBDIR)/$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res
if exist $@.manifest \
 mt -nologo -manifest $@.manifest -outputresource:$@;2
 cp $(IMPLIB) $(LIBDIR)  


{$(TOP)}.c.obj:
$(CC) -c $(WFLAGS) $(CFLAGS) $<


{$(TOP)/contrib/masmx64}.c.obj:
$(CC) -c $(WFLAGS) $(CFLAGS) $<


{$(TOP)/contrib/masmx64}.asm.obj:
$(AS) -c $(ASFLAGS) $<


{$(TOP)/contrib/masmx86}.asm.obj:
$(AS) -c $(ASFLAGS) $<

adler32.obj: $(TOP)/adler32.c $(TOP)/zlib.h $(TOP)/zconf.h
compress.obj: $(TOP)/compress.c $(TOP)/zlib.h $(TOP)/zconf.h
crc32.obj: $(TOP)/crc32.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/crc32.h
deflate.obj: $(TOP)/deflate.c $(TOP)/deflate.h $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h
gzclose.obj: $(TOP)/gzclose.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
gzlib.obj: $(TOP)/gzlib.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
gzread.obj: $(TOP)/gzread.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
gzwrite.obj: $(TOP)/gzwrite.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
infback.obj: $(TOP)/infback.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
             $(TOP)/inffast.h $(TOP)/inffixed.h
inffast.obj: $(TOP)/inffast.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
             $(TOP)/inffast.h
inflate.obj: $(TOP)/inflate.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
             $(TOP)/inffast.h $(TOP)/inffixed.h
inftrees.obj: $(TOP)/inftrees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h
trees.obj: $(TOP)/trees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/deflate.h $(TOP)/trees.h
uncompr.obj: $(TOP)/uncompr.c $(TOP)/zlib.h $(TOP)/zconf.h
zutil.obj: $(TOP)/zutil.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h
gvmat64.obj: $(TOP)/contrib\masmx64\gvmat64.asm
inffasx64.obj: $(TOP)/contrib\masmx64\inffasx64.asm
inffas8664.obj: $(TOP)/contrib\masmx64\inffas8664.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h \
$(TOP)/inftrees.h $(TOP)/inflate.h $(TOP)/inffast.h
inffas32.obj: $(TOP)/contrib\masmx86\inffas32.asm
match686.obj: $(TOP)/contrib\masmx86\match686.asm

zlib1.res: $(TOP)/win32/zlib1.rc
$(RC) $(RCFLAGS) /fo$@ $(TOP)/win32/zlib1.rc

# testing
test: example.exe minigzip.exe
example
echo hello world | minigzip | minigzip -d

testdll: example_d.exe minigzip_d.exe
example_d
echo hello world | minigzip_d | minigzip_d -d

# cleanup
clean:
-del $(STATICLIB)
-del $(SHAREDLIB)
-del $(IMPLIB)
-del *.obj
-del *.res
-del *.exp
-del *.exe
-del *.pdb
-del *.manifest
-del foo.gz


2、Makefile64.msc

内容如下:

TOP = .
LIBDIR = ./lib
# optional build flags
LOC =


# variables
STATICLIB = zlib_x64.lib
SHAREDLIB = zlib1_x64.dll
IMPLIB    = zdll_x64.lib


CC = cl
AS = ml
LD = link
AR = lib
RC = rc
CFLAGS  = -nologo -MT -W3 -O2 -Oy- -Zi -Fd"zlib_x64" $(LOC)
WFLAGS  = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_WIN64 -D_WINDOWS -D___x86_x64__
ASFLAGS = -coff -Zi $(LOC)
LDFLAGS = -nologo -debug -incremental:no -opt:ref -MACHINE:X64
ARFLAGS = -nologo -MACHINE:X64
RCFLAGS = /dWIN32 /r


OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \
       gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj
OBJA =


all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB)


$(STATICLIB): $(OBJS) $(OBJA)
$(AR) $(ARFLAGS) -out:$(LIBDIR)/$@ $(OBJS) $(OBJA)


$(IMPLIB): $(SHAREDLIB)


$(SHAREDLIB): $(TOP)/win32/zlib.def $(OBJS) $(OBJA) zlib1.res
$(LD) $(LDFLAGS) -def:$(TOP)/win32/zlib.def -dll -implib:$(IMPLIB) \
 -out:$(LIBDIR)/$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res
if exist $@.manifest \
 mt -nologo -manifest $@.manifest -outputresource:$@;2
 cp $(IMPLIB) $(LIBDIR) 
{$(TOP)}.c.obj:
$(CC) -c $(WFLAGS) $(CFLAGS) $<


{$(TOP)/contrib/masmx64}.c.obj:
$(CC) -c $(WFLAGS) $(CFLAGS) $<


{$(TOP)/contrib/masmx64}.asm.obj:
$(AS) -c $(ASFLAGS) $<


{$(TOP)/contrib/masmx86}.asm.obj:
$(AS) -c $(ASFLAGS) $<


adler32.obj: $(TOP)/adler32.c $(TOP)/zlib.h $(TOP)/zconf.h
compress.obj: $(TOP)/compress.c $(TOP)/zlib.h $(TOP)/zconf.h
crc32.obj: $(TOP)/crc32.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/crc32.h
deflate.obj: $(TOP)/deflate.c $(TOP)/deflate.h $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h
gzclose.obj: $(TOP)/gzclose.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
gzlib.obj: $(TOP)/gzlib.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
gzread.obj: $(TOP)/gzread.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
gzwrite.obj: $(TOP)/gzwrite.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h
infback.obj: $(TOP)/infback.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
             $(TOP)/inffast.h $(TOP)/inffixed.h
inffast.obj: $(TOP)/inffast.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
             $(TOP)/inffast.h
inflate.obj: $(TOP)/inflate.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \
             $(TOP)/inffast.h $(TOP)/inffixed.h
inftrees.obj: $(TOP)/inftrees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h
trees.obj: $(TOP)/trees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/deflate.h $(TOP)/trees.h
uncompr.obj: $(TOP)/uncompr.c $(TOP)/zlib.h $(TOP)/zconf.h
zutil.obj: $(TOP)/zutil.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h
gvmat64.obj: $(TOP)/contrib\masmx64\gvmat64.asm
inffasx64.obj: $(TOP)/contrib\masmx64\inffasx64.asm
inffas8664.obj: $(TOP)/contrib\masmx64\inffas8664.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h \
$(TOP)/inftrees.h $(TOP)/inflate.h $(TOP)/inffast.h
inffas32.obj: $(TOP)/contrib\masmx86\inffas32.asm
match686.obj: $(TOP)/contrib\masmx86\match686.asm
zlib1.res: $(TOP)/win32/zlib1.rc
$(RC) $(RCFLAGS) /fo$@ $(TOP)/win32/zlib1.rc


clean:
-del $(STATICLIB)
-del $(SHAREDLIB)
-del $(IMPLIB)
-del *.obj
-del *.res
-del *.exp
-del *.exe
-del *.pdb
-del *.manifest
-del foo.gz


打开vs2005 32位的命令提示行,进入根目录cd zlib-1.2.8

cd contrib/masmx86

bld_ml32.bat

cp *.obj ../../

cd ../../

nmake -f win32/Makefile32.msc LOC="-DASMV -DASMINF" OBJA="inffas32.obj match686.obj

nmake -f win32/Makefile32.msc  clean


打开vs2005 64位的命令提示行,进入根目录cd zlib-1.2.8

cd contrib/masmx64

bld_ml64.bat

cp *.obj ../../

cd ../../

nmake -f win32/Makefile64.msc AS=ml64 LOC="-DASMV -DASMINF -I." OBJA="inffasx64.obj gvmat64.obj inffas8664.obj


总结:可以修改makefile中的编译选项,比如是否要调试信息的zi,还有代码生成方式MD,命令行生成修改编译参数比较快,vc中的动态运行库没有前后兼容性,所以

建议都编译位静态库使用,反正不能复用。


opessl的编译

解压openssl,进入到跟目录

32位的编译

perl Configure VC-WIN32 no-asm zlib --prefix=D:\tplibs\openssl32 --with-zlib-include="D:\tplibs\zlib\include" --with-zlib-lib="D:\tplibs\zlib\lib\zlib_x86.lib" 

打开编译器的32位命令行终端:

ms\do_ms

nmake -f ms\nt.mak install

nmake -f ms\ntdll.mak install

64位的编译:

perl Configure VC-WIN64A no-asm zlib --prefix=D:\tplibs\openssl64 --with-zlib-include="D:\tplibs\zlib\include" --with-zlib-lib="D:\tplibs\zlib\lib\zlib_x64.lib" 

打开编译器的32位命令行终端:

ms\do_win64a.bat

nmake -f ms\nt.mak install

nmake -f ms\ntdll.mak install


总结:出现加载c动态库不对时,检查openssl中的代码生成选项与自己工程的是否一致。











原创粉丝点击