首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在zlib库中自定义zcalloc和zcfree函数时出现的链接错误

在zlib库中自定义zcalloc和zcfree函数时出现的链接错误
EN

Stack Overflow用户
提问于 2014-07-22 12:38:21
回答 1查看 1.2K关注 0票数 0

在将Nurbs库(http://www.rhino3d.com/opennurbs)集成到我的项目中时,我会遇到以下与库zlib的链接错误。

代码语言:javascript
复制
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 

我检查了功能

代码语言:javascript
复制
z_deflateInit2

在ZLIB源代码中的平减.c中,猜测该函数无法找到两个函数zcfree adn zcalloc的实现。原因是的Nurbs库自定义了函数zcfreezcalloc,这分两个步骤完成。

  1. 在Nurbs库代码中计算、zcalloc、zcfree。 opennurbs_zlib.h extern "C“{ voidpf zcalloc (voidpf,unsigned,unsigned);void (voidpf,voidpf);} 这两个函数在文件opennurbs_zlib_memory.cpp中实现为following#define voidpf z_voidpf voidpf zcalloc ( voidpf,un符号项,无符号大小){返回oncalloc(项,大小);}voidpf (voidpf,voidpf){onfree;}
  2. 使用标志: MY_ZCALLOC和Z_PREFIX编译ZLIB库

正如我所检查的,这两个步骤都已经完成,但是为什么我仍然得到链接错误。

你能给我一些建议吗?非常感谢!

更新:@戴尔·李尔:谢谢你的支持。但我的情况不一样。相反,如果与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。我不明白为什么要。

EN

回答 1

Stack Overflow用户

发布于 2014-07-23 16:37:06

根据您提供的描述和错误日志,我猜情况如下:

1)您正在使用微软C++编译器的某些版本构建一个Windows程序。

2)您想静态地链接到zlib.lib

3)您想静态地链接到opennnurbs_staticlib.lib

我无法确定您使用的是哪个版本的微软C++编译器或打开托槽。

如果您使用的是最新公开发布的opennurbs (2013-07-11版),那么zcfree()和zcalloc()函数将在文件opennurbs_zlib_memory.cpp中定义。

如果使用源代码中包含的opennurbs_staticlib.lib项目文件构建opennurbs_staticlib.vcxproj,它将编译opennurbs_zlib_memory.cpp,并在opennurbs_staticlib.lib中包含zcfree()和zcalloc()函数。如果您使用zlib代码构建zlib,并使用opennurbs 2013-07-11中包含的zlib/zlib.vcxproj文件,那么它将使用所有必要的定义构建,并且您将有两个静态库,即zlib.lib和opennurbs_staticlib.lib,它们的所有依赖项都已解决。

如果使用自定义的项目文件,首先要检查的是以某种方式静态链接编译opennurbs_zlib_memory.cpp的结果。

如果您想使用opennurbs作为DLL,我建议使用源代码附带的opennurbs.vcxproj项目文件构建opennurbs.vcxproj。这个opennurbs.dll在链接时将静态地包括zlib.lib,除了结果的opennurbs.lib之外,您不需要链接任何东西就可以使用DLL版本。

这个有用吗?

-戴尔·李尔

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24887656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档