编译Zlib注意

原文地址:http://www.cppblog.com/huyutian/archive/2010/07/24/121190.aspx,摘录于此,感觉很重要,给自己mark下。

今年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)

### 编译 zlib 库于 Windows 环境 #### 使用 MinGW 进行编译 对于希望采用 MinGW 工具链来构建 zlib 的开发者而言,过程相对直接。首先需从官方网站获取最新的 zlib 压缩包并完成本地解压操作[^1]。随后,在命令提示符窗口内切换至解压后的目录路径,并执行相应的 Makefile 文件以启动编译流程。具体来说,通过调用 `mingw32-make` 或者 `make -f win32/Makefile.gcc` 可以分别针对不同配置需求生成所需的静态库 `.a` 和动态库 `.dll`。 ```bash cd path\to\zlib-source-directory mingw32-make -f win32/Makefile.gcc ``` #### 利用 Visual Studio 结合 CMake 构建 另一种更为灵活的方法是借助 Microsoft 提供的集成开发环境——Visual Studio 来配合 CMake 完成 zlib编译工作。这种方法的优势在于能够更好地适应现代项目结构以及跨平台支持的需求。按照指引安装好必要的工具之后,可以从官方资源处取得最新版源码[^2];接着创建一个新的空文件夹作为构建输出位置,打开终端进入该文件夹运行如下指令: ```cmake cmake -G "Visual Studio 17 2022" .. msbuild ALL_BUILD.vcxproj /p:Configuration=Release ``` 这组命令会依据当前计算机架构自动选择合适的生成器(如 x86 或 x64),并且指定 Release 版本进行优化编译。最终产物将被放置在对应的子目录之下,其中包括但不限于静态链接库 `.lib` 和共享对象 `.dll` 文件。 值得注意的是,默认情况下所生产的动态链接库命名为 `zlibwapi.dll` ,这一命名方式保持了向后兼容性以便替代旧有的 `zlib.dll` 实现无缝迁移[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值