大龙的博客

常用链接

统计

最新评论

在WindowsXP下用VS2008编译Zlib-1.2.5 --- 转

   zlib网站下载zlib源文件zip包(zlib1.2.5.zip)到本地的机器上(本人的机器是windowsXP操作系统,按缺省设置安装的VS2008pro),解压缩后保存在本地磁盘的某一目录(d:\zlib-1.2.5)。该目录下包括若干子目录和源文件,其中一个子目录(d:\zlib-1.2.5\win32)中有若干make文件,Makefile.msc是在windows环境下采用微软编译器(vc6.0、VS2008等)的make文件,列出了4种编译方法:
# Usage:
  nmake -f win32/Makefile.msc                          (standard build)
  nmake -f win32/Makefile.msc LOC=-DFOO                (nonstandard build)
  nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" \
        OBJA="inffas32.obj match686.obj"               (use ASM code, x86)
  nmake -f win32/Makefile.msc AS=ml64 LOC="-DASMV -DASMINF" \
        OBJA="inffasx64.obj gvmat64.obj inffas8664.c"  (use ASM code, x64)

    本人的机器是32位系统,没有尝试第4种编译方式,前3种中只有第3种采用汇编的代码编译可以成功,前2种在编译的链接(link)过程中出现错误:
    link -nologo -debug -incremental:no -opt:ref -def:win32/zlib.def -dll -implib:zdll.lib  -out:zlib1.dll -base:0x5A4C0000 adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj  gzwrite.obj infback.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj  zlib1.res
   Creating library zdll.lib and object zdll.exp
infback.obj : error LNK2019: unresolved external symbol _inflate_fast referenced in function _inflateBack
inflate.obj : error LNK2001: unresolved external symbol _inflate_fast
zlib1.dll : fatal error LNK1120: 1 unresolved externals

    查看Makefile.msc文件,可以发现在定义OBJS时没有包括inffast.obj。
......
OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \
       gzwrite.obj infback.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
OBJA =

# targets
all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \
     example.exe minigzip.exe example_d.exe minigzip_d.exe

$(STATICLIB): $(OBJS) $(OBJA)
    $(AR) $(ARFLAGS) -out:$@ $(OBJS) $(OBJA)
......
infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
             inffast.h inffixed.h

inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
             inffast.h

inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
             inffast.h inffixed.h

inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h

trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h

......

在make文件的OBJS中加入inffast.obj(如下所示)后,make文件中所列的第1种和第2种编译方式均可成功。

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

本人不清楚make文件会有这样的问题,也不清楚是有意设计还是bug。

另:需要从"Visual Studio 2008 Command Prompt"使用nmake命令,以使VS2008相关系统参数正确设置。

posted on 2010-09-26 11:44 大龙 阅读(5718) 评论(2)  编辑 收藏 引用

评论

# re: 在WindowsXP下用VS2008编译Zlib-1.2.5 --- 转[未登录] 2011-03-27 05:59 Sunny

Hi there,

Thanks for the hint in getting zlib compiled! It seems like my Makefile.msc was also missing inffast.obj, and your suggestion worked.

Sunny.  回复  更多评论   

# re: 在WindowsXP下用VS2008编译Zlib-1.2.5 --- 转 2011-12-27 15:43 Fred W

Hey thanks for posting this. You saved me time, my day is now shorter.  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理