在将 Nurbs 库 ( http://www.rhino3d.com/opennurbs ) 集成到我的项目中时,我遇到了与库 zlib 的以下链接错误。
1>zlib.lib(deflate.obj) : error LNK2019: unresolved external symbol _zcfree referenced in function _z_deflateInit2_
1>zlib.lib(inflate.obj) : error LNK2001: unresolved external symbol _zcfree
1>zlib.lib(deflate.obj) : error LNK2019: unresolved external symbol _zcalloc referenced in function _z_deflateInit2_
1>zlib.lib(inflate.obj) : error LNK2001: unresolved external symbol _zcalloc
我检查了功能
z_deflateInit2
在 ZLIB 源代码的deflate.c文件中,猜测这个函数找不到zcfree和zcalloc两个函数的实现。原因是Nurbs 库自定义了函数zcfree和zcalloc,分两步完成。
在 Nurbs 库代码中自定义 zcalloc和zcfree 。
opennurbs_zlib.h extern "C" { voidpf zcalloc (voidpf, unsigned, unsigned); void zcfree (voidpf, voidpf); }
这两个函数在文件opennurbs_zlib_memory.cpp中实现如下
#define voidpf z_voidpf voidpf zcalloc (voidpf, unsigned items, unsigned size) { return oncalloc(items, size); } void zcfree (voidpf, voidpf ptr) { onfree(ptr); }
- 使用标志编译 ZLIB 库:MY_ZCALLOC 和 Z_PREFIX
正如我检查的那样,这两个步骤都已完成,但是为什么我仍然遇到链接错误。
你能给我一些建议吗?非常感谢!
更新:@Dale Lear:感谢您的支持。但我的情况不同。相反,如果与opennurbs.lib链接,我尝试将opennurbs的源代码集成到我的项目中(如点云库的表面模块:http ://www.pointclouds.org/blog/trcs/moerwald/ )。我从 opennurbs 解决方案中的 zlib 项目构建 zlib。这个 zLib 是用修改后的 zconfig.h 构建的(Z_PREFIX 和 Z_MYCALL,我猜是这样定义的)。这意味着函数 zfree 和 zalloc 仍在等待执行。但是为什么ZLib没有从opennurbs_zlib_memory.cpp中取zcfree()和zcalloc。我不明白为什么需要。