在将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源代码中的平减.c中,猜测该函数无法找到两个函数zcfree adn zcalloc的实现。原因是的Nurbs库自定义了函数zcfree和zcalloc,这分两个步骤完成。
正如我所检查的,这两个步骤都已经完成,但是为什么我仍然得到链接错误。
你能给我一些建议吗?非常感谢!
更新:@戴尔·李尔:谢谢你的支持。但我的情况不一样。相反,如果与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。我不明白为什么要。
发布于 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版本。
这个有用吗?
-戴尔·李尔
https://stackoverflow.com/questions/24887656
复制相似问题