您的位置:首页 > 其它

编译zlib遇到的问题 没有找到match686.obj

2015-08-10 13:37 961 查看
今年4月zlib发布了1.2.5版,修正了几个bug,增加了新功能(目前我还用不上).

最近准备在自己的程序中用这个版本。结果怎么也编译通不过。折腾了我一整天才搞定,发现是两个小的设置没有弄好。哎。。。

新的1.2.5版本只提供了vc9、vc10两个project配置文件.我用项目版本转换文件怎么也不能转到vc7.1下。没办法只好装了一个vc2008重新编译。

把zlib 1.2.5加入自己的项目,编译时有两点要注意

1.就是zlib 1.2.5源代码包中\contrib\vstudio\readme.txt中说的在使用zlib要预定义宏ZLIB_WINAPI,否则无法编译通过。

- To use zlibwapi.dll in your application, you must define the macro ZLIB_WINAPI when compiling your application's source files.

2.链接时,除了#pragma comment(lib, "zlibvc.lib")添加引入库外,还要注意Character Set的设置要统一。否则也会出现链接错误,提示找不到_compress外部变量。

后记(2011-6-19)

我的编程环境已升级VS2008,又想在项目中使用ASM版本的ZLIB,重新从zlib.net下载后,直接使用zlib-1.2.5\contrib\vstudio\vc9下的zlibvc项目文件编译出错。发现是zlib-1.2.5\contrib\masmx86下的OBJ文件没有生成。进入VS2008命令行环境,运行bld_ml32.bat生成两个obj文件。重新在集成环境下编译就没问题了。但是如果是使用ZLIB的静态库版本,一定注意要将这两个obj文件包含到最终的zlibvc.lib中去。否则在自己的应用项目中编译时会提示如下错误。1>zlibr.lib(inflate.obj)
: error LNK2001: unresolved external symbol _inflate_fast

1>zlibr.lib(deflate.obj) : error LNK2001: unresolved external symbol _longest_match

1>zlibr.lib(deflate.obj) : error LNK2001: unresolved external symbol _match_init

把两个obj文件包含到zlibvc.lib的方法是,Project->Property->Librarian->Additional Dependencies 加入inffas32.obj match686.obj,同时Additional Library Directories设置正确。

另外,如果使用命令行编译进入zlib-1.2.5\win32目录运行下面的命令就可以了。

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)

自己遇到的问题:

没有找到match686.obj这个问题。

解决方法:

进入VS2008命令行环境,运行bld_ml32.bat生成两个obj文件。

在vs2008的IDE中,进入命令行,运行bld_ml32.bat,就会生成相应的match686.obj文件,重新编译zlib工程就可以编译成功了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: